如何将当前线程堆栈的所有Args转储到Child,例如我想在当前堆栈中的每个帧的args上执行类似du
的命令。就像所有帧上的du ebp+<1st 4 args>
一样。
答案 0 :(得分:0)
恕我直言,在WinDbg中做起来并不容易,但我可以推荐PyKd来解决这个问题。确保以正确的位数安装Python(与您想要使用的WinDbg具有相同的位数)。
0:000> .symfix
0:000> .reload
0:000> .load E:\...\pykd\0.3.0.27\x86\pykd.dll
如果没有pykd.pyd
,请使用pykd.dll
。
0:000> !py
>>> s = getStack()
>>> for f in s:
... for p in range(1,4):
... print("%016X" % (ptrPtr(f.sp + p*ptrSize())))
...
>>> exit()
s
是当前线程的堆栈。 for f in s
遍历所有帧。p
将是0
作为返回地址的参数,1
至4
是kb
显示的参数。p*ptrSize()
计算相对于位数的正确偏移量f.sp
为您提供当前帧的堆栈指针ptrPtr()
从内存中读取指针大小(位数感知)数据"%016X" % n
以十六进制格式化数字exit()
让您退出交互式控制台现在您已拥有所有参数,您也可以将其值转储为字符串。你可以试试PyKd的loadWStr()
。这是一个完整的脚本:
from pykd import *
s = getStack()
for f in s:
for p in range(1,4):
paramaddr = f.sp + p*ptrSize()
string = loadWStr(paramaddr)
print(string)
如果要将其应用于所有线程,请按以下方式运行:
0:000> ~*e !py string.py