Как получить информацию о разделе / разрешения на смещение от windbg/dbgeng api?
Я пишу расширение для 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.
Я что-то пропустил? Есть ли документированный / недокументированный способ, которым я мог бы достичь этого?
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