我正在编写dbgeng客户端,并试图枚举用于时间旅行调试会话的可用虚拟内存。
Dbgeng有IDebugDataSpaces2::QueryVirtual方法,它很适合实时用户模式调试会话,但不适用于TTD跟踪会话重放。当我试图调用它时,我会收到0x8000ffff (E_UNEXPECTED)错误。
看起来,来自windbg预览gui的!address和!vprot命令也有相同的问题。
0:000> !vprot 0
ERROR: !vprot: extension exception 0x8000ffff.
"QueryVirtual failed"
0:000> !address
BaseAddress EndAddress+1 RegionSize Type State Protect Usage
--------------------------------------------------------------------------------------------------------------------------有IDebugDataSpaces4::GetValidRegionVirtual方法。它可以工作,但是太长了(看起来它试图手动检查每一页)。看起来IDebugDataSpaces4::GetNextDifferentlyValidOffsetVirtual在TTD重放方面也是错误的。
dbgeng还有其他方法来枚举进程的有效内存范围吗?或者还有另一种方法从IDX或运行文件中获取这些信息?
发布于 2021-05-20 20:32:10
目前,TTD中没有实时调试和转储文件中可用的一些信息。两个主要特性是:( a) QueryVirtual不工作;( b)进程和线程安全令牌信息没有保存。我在调试扩展中经常使用QueryVirtual,并对其进行了修改。很抱歉成为坏消息的传达者。
https://stackoverflow.com/questions/67602421
复制相似问题