C++ 图像\u导出\u目录值错误

C++ 图像\u导出\u目录值错误,c++,c,winapi,portable-executable,C++,C,Winapi,Portable Executable,我在IMAGE\u EXPORT\u目录值方面遇到问题,每当我计算它的地址时,它都会给我错误的值(比如Name,NumberOfNames,AddressOfNames,等等)。 我用下面的代码计算它 IMAGE_EXPORT_DIRECTORY *export_directory = (IMAGE_EXPORT_DIRECTORY*)(nt_headers->OptionalHeader.DataDirectory[0].VirtualAddress + (DWORD)dos_heade

我在
IMAGE\u EXPORT\u目录
值方面遇到问题,每当我计算它的地址时,它都会给我错误的值(比如
Name
NumberOfNames
AddressOfNames
,等等)。 我用下面的代码计算它

IMAGE_EXPORT_DIRECTORY *export_directory = (IMAGE_EXPORT_DIRECTORY*)(nt_headers->OptionalHeader.DataDirectory[0].VirtualAddress + (DWORD)dos_header);
在调试器中,地址是正确的,必须有一个
IMAGE\u EXPORT\u目录
,但为什么它会给我错误的结果?无法从中访问任何元素,因为它显示错误的ptr。。 尝试使用
kernel32.dll
并运行良好,但从名称的地址提取名称时在
user32.dll
上失败


使用Windows 8 x86。

VirtualAddress只是节的首选加载地址。它通常不会在那里实际加载,如果DLL的首选加载地址已在使用中,则会重新定位DLL。并且它可以通过ASLR特征随机化。将GetModuleHandle的返回值强制转换为void*以查找实际的加载地址。我还没有使用重定位,而是使用ReadFile来缓冲,而不是GetModuleHandle。这里已经回答了这个问题:谢谢,开始尝试时我不懂这个答案,但我知道如何理解它。我是C/C++的初学者。您需要减去磁盘上节的实际位置与ram中节(展开时)的实际位置。