【问题标题】:How to get section info/offset permissions from windbg/dbgeng api?如何从 windbg/dbgeng api 获取部分信息/偏移权限?
【发布时间】:2014-12-11 06:09:23
【问题描述】:

我正在为 Windbg 编写一个扩展,在某个特定点我需要获得内存偏移的权限,就像 !address addr 在 Windbg 中提供的那样。我在这里查看了 Debugger Engine API 的可用功能:

http://msdn.microsoft.com/en-us/library/windows/hardware/ff551059%28v=vs.85%29.aspx

但是我找不到这样一个函数,它可以根据内存偏移量返回部分/权限信息。基本上我想知道地址所在的部分,数据部分,文本部分等,它有什么权限等等。

我找到的最接近的探测函数是 IDebugDataSpaces4 接口中的 GetOffsetInformation。但是根据文档,它没有提供我正在寻找的任何东西:

http://msdn.microsoft.com/en-us/library/windows/hardware/ff548055(v=vs.85).aspx

我总是可以运行!address 命令并解析其输出,但我一直在寻找一种更简洁的方法,可以通过使用 API 直接获取此信息。

我错过了什么吗?是否有记录/未记录的方式可以实现这一目标?

【问题讨论】:

标签: visual-studio debugging winapi windbg dbgeng


【解决方案1】:

QueryVirtual 不工作吗?

#include <engextcpp.hpp>

class EXT_CLASS : public ExtExtension
{
public:
    EXT_COMMAND_METHOD(getoffinfo);
};

EXT_DECLARE_GLOBALS();


EXT_COMMAND( getoffinfo, "", "{;e,d=0;getoffinfo;simulates !address <address>}" )

{
    ULONG64 Offset  = GetUnnamedArgU64(0);
    if (Offset == 0)
    {
        Out( "usage !getoffinfo <address>\n");
    }
    else
    {
        MEMORY_BASIC_INFORMATION64 meminfo;
        memset(&meminfo,0,sizeof(MEMORY_BASIC_INFORMATION64 ));
        m_Data2->QueryVirtual(Offset,&meminfo);
        Out("Allocation Base    :   %x\n",meminfo.AllocationBase);
        Out("Base Address       :   %x\n",meminfo.BaseAddress);
        Out("End Address        :   %x\n",meminfo.AllocationBase + meminfo.RegionSize);
        Out("RegionSize         :   %x\n",meminfo.RegionSize);
        Out("Type               :   %x\n",meminfo.Type);
        Out("State              :   %x\n",meminfo.State);
    }

}

结果如下

0:000> !address windbg
Usage:                  Image
Allocation Base:        01000000
Base Address:           01000000
End Address:            01001000
Region Size:            00001000
Type:                   01000000    MEM_IMAGE
State:                  00001000    MEM_COMMIT
Protect:                00000002    PAGE_READONLY
More info:              lmv m windbg
More info:              !lmi windbg
More info:              ln 0x1000000

0:000> .load getoffinfo
0:000> !getoffinfo
usage !getoffinfo <address>
0:000> !getoffinfo windbg
Allocation Base    :   1000000
Base Address       :   1000000
End Address        :   1001000
RegionSize         :   1000
Type               :   1000000
State              :   1000

【讨论】:

    猜你喜欢
    • 2012-08-27
    • 1970-01-01
    • 2010-09-16
    • 1970-01-01
    • 2020-09-07
    • 1970-01-01
    • 1970-01-01
    • 2016-05-07
    • 1970-01-01
    相关资源
    最近更新 更多