windbg学习总结

无法正确输出地址问题

1
2
ReadMemory error for address eeddccee
Use `!address eeddccee' to check validity of the address.

无法正确断下点问题

address命令正确的指示了该地址为私有堆内存,但该内存页不可访问。
检查注册表:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options,确定已经正确的设置了,
尝试其他多种设置,甚至换工具进行设置,但结依然如此。
难道是机器问题?于是在win732位机器上重复上述过程,
发现是可以正确的打印出堆内存指针被释放的栈回溯的。
但更换其他xp机器依然不能正确显示。
"CTEST* pCTest = new CTEST(); "的栈回溯几率,
即申请堆内存的记录,但始终未找到释放堆内存的记录。
于是再次怀疑xp下的页堆并没有真正启动或启动是有问题的,
于是检查下页堆启动情况:
“ReadMemory error for address eeddccee”,  
且只展示一个Page Heap句柄了,剩下的未展示完全,
但页堆明明白白的现实已经开启,也有了准页堆,
但数据却显示不出来,说明数据可能被破坏,
但测试代码如此简单,而且也被windbg第一时间断下,
不可能去破坏数据,换成6.6.0007.5版即可解决。
试了下果然在xp下顺利输出了用户态栈回溯。
Win7下的 _STACK_TRACE_DATABASE 结构和xp下并不完全相同,
关键的 Buckets(栈回溯记录)的结构偏移改了,
而且原xp下是个数组,但win7下却变成了链表,
故猜测高版本的Windbg在xp下依然使用了win7下的某些数据结构,
从而导致Windbg解析出了问题。

无法正确下堆断点

peb错误
输入如下代码
就可以!gflag
1
2
.sympath srv*C:\symblol*http://msdl.microsoft.com/download/symbols 
.reload

active控件分析方法

alt+e进入oleaut32
ctrl+n 找到DISPCALLFUNC
找到首个 call ecx