2010-11-19 3 views
0

J'utilise ReadProcessMemory, bien pour lire la mémoire de processus. Je regarde un endroit qui contient une valeur 3325. Cependant, je regarde la mémoire dans une visionneuse d'hex et la valeur est affichée comme FD0C = 0CFD = 3325. Ainsi quand je lis la valeur dans mon tableau de char, puis essaye et convertis (atoi) Je reçois des ordures. Je suis nouveau en C++ et je me demande s'il y a une fonction qui ferait la conversion ou est-ce que je vais devoir l'écrire moi-même (ce qui ne me dérange pas)?ReadProcessMemory tableau char, sortie hexadécimale à int

char num_char[16]; 
    _stackstart = _start + 0x28; 
    ReadProcessMemory(hProcess,(void *)_stackstart, &num_char, 4, &lpRead); 
    x = ...some conversion(num_char); 
    if(stack != x) 
    {tell me;} 

Répondre

0

atoi ne fonctionne que pour les nombres décimaux. Utilisez strtol au lieu et passer une valeur de base de 16 pour convertir des nombres hexadécimaux:

x = strtol(num_char, NULL, 16); 
+0

Son petit boutiste, est-il un moyen de l'obtenir pour lire le tableau de droite à gauche? – flavour404

0

À partir du code que vous publiez et votre description, il ne semble pas que vous faites affaire avec une chaîne de caractères ascii, mais plutôt tampon conservant un nombre binaire. Pour convertir la valeur binaire brute en entier, il suffit de la convertir à la valeur correcte. Notez que vous devez veiller à le convertir en un type entier de taille correcte. Vous ne liste 2 octets dans votre numéro d'exemple, mais vous lisez 4.

Pour Visual Studio 2008, où un int ou long est un entier de 4 octets, vous pouvez simplement faire ceci:

int x = *reinterpret_cast<int*>(num_char); 

Remarque Pour être plus portable, vous devez utiliser un type dont la taille est garantie à 4 octets. En Visual C++ vous pouvez utiliser DWORD. Bien que la solution préférée serait d'utiliser int32_t de stdint.h, bien que cela ne soit pas disponible avec Visual Studio avant la version Visual Studio 2010.

De même, vous ne mentionnez pas si votre type est signé ou non signé, s'il n'est pas signé, puis utilisez un type non signé.