首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从windbg/dbgeng获得节信息/偏移权限?

如何从windbg/dbgeng获得节信息/偏移权限?
EN

Stack Overflow用户
提问于 2014-12-11 06:09:23
回答 1查看 607关注 0票数 3

我正在为Windbg编写一个扩展,在特定的时候,我需要获得内存偏移的权限,就像!address addr在Windbg中提供的方式一样。我在以下站点查看了调试器引擎API的可用功能:

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

但是,我未能找到这样一个函数,该函数将返回针对内存偏移量的节/权限信息。基本上,我想知道地址在哪个部分,数据部分,文本部分等等,它有什么权限等等。

我发现的最接近的函数是GetOffsetInformation在IDebugDataSpaces4接口中。但是,根据文档,它并没有提供我想要的任何内容:

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

我可以始终运行!address命令并对其输出进行分析,但是我正在寻找一种更干净的方法,可以通过使用API直接获取这些信息。

我是不是遗漏了什么?是否有一种记录在案的/无文件记录的方法可以让我做到这一点?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-12-11 12:28:29

QueryVirtual不起作用吗?

代码语言:javascript
复制
#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);
    }

}

结果如下:

代码语言:javascript
复制
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
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27416437

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档