c++ - 通过映射到的地址获取映射到内存中的文件名

标签 c++ c windows winapi memory

假设有以下代码-

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 调试这个可执行文件时,它似乎也没有很好地提取模块

enter image description here

最佳答案

是的,这正是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/

相关文章:

c++ - 使用 G++ 构建时出现错误 1

c++ - 使用标准输入执行任意进程的最简单方法是什么,标准输出转发到套接字?

c++ - 为属性表创建调试器友好的枚举

c - C/C++ 中的 mmap hdf5 数据集

c - 了解指针数组语法

windows - 批处理脚本,在服务器上调用 cmd

windows - 如何 Hook Windows 中的所有新进程

windows - 引导时 Vagrant 'remote connection disconnect'

c++ - 你能使 Visual Studio 12 输出 .o 文件而不是 .obj 吗?

继续表现怪异吗?