2017-06-27 2 views
0

J'essaye de traduire la ligne de code C suivante en ctypes. Voici un extrait du programme C Je suis en train de traduire:SecureZeroMemory en Python Ctypes

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

(Notez que MIB_IF_ROW2 est un struct, défini dans Netioapi.h)

Quoi qu'il en soit, je peux traduire la première ligne fine en ctypes , en supposant MIB_IF_ROW2 a déjà été définie comme une struct 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... ? 

Mais quand je rentre à la deuxième ligne, je reçois coincé. Je ne trouve rien dans les docs ou en ligne avec un équivalent ctypes pour la fonction. Quelle est la meilleure manière de s'occuper de ça?

+0

Dans ce contexte, il semble très peu probable que vous spécifiquement besoin de la fonction 'SecureZeroMemory'. 'ctypes.memset' devrait faire aussi bien. –

+1

'[Rtl] SecureZeroMemory' est une fonction inline définie dans winnt.h. Il n'est pas exporté par une DLL système. Vous n'en avez pas besoin car ctypes zeros memory qu'il alloue. En outre, il s'agit d'une structure de taille fixe, il n'est donc pas nécessaire de convertir un tampon en pointeur. Instanciez-le simplement comme 'if_row = MIB_IF_ROW2()' et 'p_if_row = ctypes.pointer (if_row)'. – eryksun

Répondre

1

SecureZeroMemory va juste remplir la mémoire que vous lui passez avec des zéros. Vous devriez obtenir exactement le même résultat avec ZeroMemory/memset ou une boucle simple en python. La chose qui le rend "sûr" est qu'il n'est pas censé être optimisé par le compilateur (lors de la programmation à un niveau inférieur comme C/C++).

l'aide sur la mémoire que vous venez de malloc n'est pas son but (pas nocif si), il est censé être utilisé comme ceci:

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