我认为您正在调用 C 函数的汇编程序中进行调试,并尝试使用 ollydbg 来跟踪它(我只是查找了它是什么,并根据他们的功能列表进行了这个假设)。这是很难做到的。
我建议你这样做:
...
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);
如果您实际上无法打印就可以了。只需将函数extern
添加到有问题的文件memcpy
中,它就会强制编译器将值加载到保存第一个参数的位置。您应该能够在调试器中观察到这一点。
memcpy
(来自任何合理的 C 库)实际上做错事的可能性非常低。
如果我不得不猜测出了什么问题,那lpBuffer
实际上不应该是void *
一个内存位置的链接器标签。在这种情况下,您可能应该尝试将其声明为:
extern char lpBuffer[];
把你的 memcpy 做为
memcpy(&iDOSh,lpBuffer,sizeof(iDOSh));
或者
extern IMAGE_DOS_HEADER lpBuffer;
把你的 memcpy 做为
memcpy(&iDOSh,&lpBuffer,sizeof(iDOSh));