如何查找地址是否属于代码或数据部分

时间:2012-05-16 16:29:15

标签: c++ windows winapi

给定一个地址我想在运行时找不到访问磁盘上的PE头,如果它属于.text部分(是否还有其他可执行部分?)。
更多细节:
该地址与我正在运行的进程相同,但它可以构成一个不同的dll静态库或运行该进程的可执行文件。
我正在使用VS2010 Win32在Windows上运行。

2 个答案:

答案 0 :(得分:4)

你想要VirtualQuery。它填充MEMORY_BASIC_INFORMATION结构。如果mbi.Type == MEM_IMAGE,您正在查看映射的图像。您可能还想查看AllocationProtect以检查PAGE_EXECUTE或其中一个变体(否则您可能会查看从可执行文件映射的只读数据,例如位图资源或那个订单上的东西)。

答案 1 :(得分:0)

考虑DbgHelp API:http://msdn.microsoft.com/en-us/library/ms679292(v=vs.85

例如,

EnumerateLoadedModulesEx为您提供有关基本地址和大小的已加载模块的信息 (所以你可以识别模块)

MapDebugInformation检索有关模块部分的信息