假设有以下代码-
HANDLE h = CreateFile(L"some_dll.dll", GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_DELETE,
NULL,
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
HANDLE map = CreateFileMapping(h, NULL, PAGE_READONLY | SEC_IMAGE, 0, 0, NULL);
LPVOID res = MapViewOfFileEx(map, 0, 0, 0, 0, 0);
是否可以使用 C++ 提取“some_dll”,给定它映射到的地址?
当尝试使用 windbg 调试这个可执行文件时,它似乎也没有很好地提取模块
最佳答案
是的,这正是GetMappedFileName用于:
Checks whether the specified address is within a memory-mapped file in the address space of the specified process. If so, the function returns the name of the memory-mapped file.
PS:windbg
没有理由显示不是已加载模块的内存映射文件的名称,即使该文件恰好是 DLL。
关于c++ - 通过映射到的地址获取映射到内存中的文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46172131/