C++ Can';无法正确读取导出目录

C++ Can';无法正确读取导出目录,c++,windows,C++,Windows,我正在尝试读取已加载模块的导出目录。以下程序作为32位二进制文件工作,但作为64位文件崩溃 所有指针都是64位的,我不确定这里的区别,有人知道哪里出了问题吗 #include <windows.h> #include <iostream> #include <dbghelp.h> #pragma comment(lib, "dbghelp.lib") void PrintNames(HMODULE hModule) { DWORD

我正在尝试读取已加载模块的导出目录。以下程序作为32位二进制文件工作,但作为64位文件崩溃

所有指针都是64位的,我不确定这里的区别,有人知道哪里出了问题吗

#include <windows.h>
#include <iostream>
#include <dbghelp.h>
#pragma comment(lib, "dbghelp.lib")

void PrintNames(HMODULE hModule)
{
    DWORD dwExportsSize;
    PIMAGE_NT_HEADERS pNtHeaders = (PIMAGE_NT_HEADERS)ImageNtHeader(hModule);
    PIMAGE_EXPORT_DIRECTORY ExportDirectory = (PIMAGE_EXPORT_DIRECTORY)ImageDirectoryEntryToData(hModule, TRUE, IMAGE_DIRECTORY_ENTRY_EXPORT, &dwExportsSize);
    PULONG Names = (PULONG)((DWORD)hModule + ExportDirectory->AddressOfNames);

    for (ULONG cEntry = 0; cEntry < ExportDirectory->NumberOfNames; cEntry++)
    {
        printf("%s\n", (char*)((DWORD_PTR)hModule + Names[cEntry]));
    }

}

int main()
{
    PrintNames(GetModuleHandleA("ntdll"));
    return 0;
}
#包括
#包括
#包括
#pragma注释(lib,“dbghelp.lib”)
无效打印名(HMODULE HMODULE)
{
德沃德·德沃兹;
PIMAGE\u NT\u头pNtHeaders=(PIMAGE\u NT\u头)图像头(hModule);
PIMAGE\u EXPORT\u DIRECTORY ExportDirectory=(PIMAGE\u EXPORT\u DIRECTORY)ImageDirectoryEntryToData(hModule,TRUE,IMAGE\u DIRECTORY\u ENTRY\u EXPORT,&dwExportsSize);
PULONG名称=(PULONG)((DWORD)hModule+ExportDirectory->AddressOfNames);
对于(ULONG cEntry=0;cEntryNumberOfNames;cEntry++)
{
printf(“%s\n”,(char*)((DWORD_PTR)hModule+Names[cEntry]);
}
}
int main()
{
打印名(GetModuleHandleA(“ntdll”);
返回0;
}

DWORD是32位的,不足以容纳64位。如果需要指针大小,请将其更改为DWORD_PTR

PULONG Names = (PULONG)((DWORD_PTR)hModule + ExportDirectory->AddressOfNames);