2014-12-11 3 views
3

Windbg 용 확장 프로그램을 작성 중이며 특정 시점에 Windbg에서 !address addr이 제공하는 것과 같이 메모리 오프셋에 대한 사용 권한을 얻어야합니다. 내가 메모리 오프셋에 대한 섹션/권한 정보를 반환 이러한 기능을 찾는데 실패했다 그러나windbg/dbgeng api에서 섹션 정보/오프셋 권한을 얻는 방법은 무엇입니까?

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

: 나는 여기 디버거 엔진 API의 사용 가능한 기능을 살펴 있었다. 기본적으로 나는 어떤 섹션에 주소가 있는지, 데이터 섹션, 텍스트 섹션 등, 어떤 권한을 가지고 있는지 알고 싶습니다.

내가 발견 한 가장 가까운 소리 기능은 IDebugDataSpaces4 인터페이스의 GetOffsetInformation입니다. 그러나 내가 찾던 문서에 따라, 그것은 아무것도 제공하지 않습니다

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

난 항상 !address 명령을 실행하고 그 출력을 구문 분석 할 수 있지만, 나는 깨끗한 방법 곳을 찾고 있었다 API를 사용하여이 정보를 직접 얻을 수있었습니다.

내가 누락 된 항목이 있습니까? 문서화 된/문서화되지 않은 방식으로이 작업을 수행 할 수 있습니까?

+1

그것은 당신이 ['IDebugDataSpaces2 :: QueryVirtual'] (찾고있는 것처럼 http://msdn.microsoft.com/en-us/library/windows/ 소리 하드웨어/ff553502 % 28v = vs.85 % 29.aspx). 주어진 내용을 담고있는 페이지에 대한 [MEMORY_BASIC_INFORMATION] (http://msdn.microsoft.com/en-us/library/windows/desktop/aa366775%28v=vs.85%29.aspx) 구조체를 채 웁니다 주소. –

+0

사실, 그게 정확히 내가 찾고 있던 것입니다. 감사! – user1831704

답변

3

Doesnt QueryVirtual Work?

#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 
+0

감사합니다! – user1831704