0

我正在尝试将以下 C 代码行翻译成 ctypes。这是我要翻译的 C 程序的一个片段:

pIfRow = (MIB_IF_ROW2 *) malloc(sizeof(MIB_IF_ROW2));
SecureZeroMemory((PVOID)pIfRow, sizeof(MIB_IF_ROW2));

(注意MIB_IF_ROW2是一个结构,在 Netioapi.h 中定义)

无论如何,我可以在 ctypes 中很好地翻译第一行,假设 MIB_IF_ROW2 已经被定义为 ctypes 结构:

from ctypes import *

# Translate first line of C Code
buff = create_string_buffer(sizeof(MIB_IF_ROW2))
p_if_row = cast(buff, POINTER(MIB_IF_ROW2))

# Second Line... ?

但是当我到达第二行时,我被卡住了。我在文档或在线中找不到与该功能等效的 ctypes 的任何内容。解决此问题的最佳方法是什么?

4

1 回答 1

2

SecureZeroMemory只会用零填充您传递的内存。ZeroMemory您应该使用/memset或 python 中的普通循环获得完全相同的结果。使它“安全”的事情是它不应该被编译器优化掉(在像 C/C++ 这样的较低级别进行编程时)。

在你刚刚 malloc'ed 的内存上使用它不是它的预期目的(虽然无害),它应该像这样使用:

char password[100];
AskUserForPassword(password);
DoSomething(password);
SecureZeroMemory(password, sizeof(password)); // Make sure password is no longer visible in memory in case the application is paged out or creates a memory dump in a crash
于 2017-06-28T02:02:55.683 回答