Je pense que vous êtes en train de déboguer dans l'assemblage appelant des fonctions C et essayant de tracer cela avec ollydbg (j'ai juste cherché ce que c'est et basé cette hypothèse sur leur liste de fonctionnalités). C'est très difficile à faire.
Je vous suggère de faire:
...
void print_ptr(void * p) {
fprintf(stderr, "%p\n", p);
}
...
IMAGE_DOS_HEADER iDOSh;
print_ptr(lpBuffer);
memcpy(&iDOSh,lpBuffer,sizeof(iDOSh));
print_ptr(lpBuffer);
Si vous n'êtes pas réellement en mesure d'imprimer des choses qui seront ok. Faites simplement les fonctions extern
dans le fichier avec le memcpy
en question et cela forcera le compilateur à charger la valeur dans l'emplacement qui contient le premier paramètre. Vous devriez être capable d'observer ceci dans votre débogueur.
La probabilité que le memcpy
(de toute bibliothèque C raisonnable) soit en train de faire quelque chose de mal est très très faible.
Si je devais deviner ce qui ne va pas, il se pourrait que lpBuffer
ne soit pas censé être un void *
mais une étiquette de liaison pour un emplacement de mémoire. Dans ce cas, vous pourriez devriez essayer déclarer comme:
extern char lpBuffer[];
et faites votre memcpy comme
memcpy(&iDOSh,lpBuffer,sizeof(iDOSh));
ou
extern IMAGE_DOS_HEADER lpBuffer;
et faites votre memcpy comme
memcpy(&iDOSh,&lpBuffer,sizeof(iDOSh));
Comment obtenez-vous les valeurs de dest et src? –
@ Simon, le code que vous avez là n'explique pas votre problème. Si votre pointeur est mauvais, ce n'est pas la faute de 'memcpy'. –
Les valeurs de dest et de src ont été vérifiées avec olly, juste BPed memcpy et ont regardé la pile – Simon