如何找出EBP属于哪个堆栈帧
逆向工程
视窗
ollydbg
2021-06-26 14:27:57
1个回答
当前 ebp 指向前一个 ebp
并通过推断设置前一个 ebp 的调用
在带有 32 位二进制文件的 windbg 中,此脚本将遍历堆栈,您可以在 ollydbg 中的转储中使用 follow 来执行相同的操作
r $t0 = @eip
r $t1 = @ebp
.while (@$t1 !=0)
{
.printf "eip = %08x\tebp = %08x\t callee = %y\n" , @$t0 ,@$t1,poi(@$t1+4)
r $t0 = poi(@$t1+4)
r $t1 = poi(@$t1)
}
执行脚本
0:000> $$>a< e:\stackwalk.wds
eip = 006a163a ebp = 0023fa54 callee = calc!_initterm_e+0x1a1 (006b219a)
eip = 006b219a ebp = 0023fae4 callee = kernel32!BaseThreadInitThunk+0xe (7659ed6c)
eip = 7659ed6c ebp = 0023faf0 callee = ntdll!__RtlUserThreadStart+0x70 (77d237eb)
eip = 77d237eb ebp = 0023fb30 callee = ntdll!_RtlUserThreadStart+0x1b (77d237be)
eip = 77d237be ebp = 0023fb48 callee = 00000000
0:000> k
ChildEBP RetAddr
0023fa54 006b219a calc!WinMain+0x5
0023fae4 7659ed6c calc!_initterm_e+0x1a1
0023faf0 77d237eb kernel32!BaseThreadInitThunk+0xe
0023fb30 77d237be ntdll!__RtlUserThreadStart+0x70
0023fb48 00000000 ntdll!_RtlUserThreadStart+0x1b
0:000>
其它你可能感兴趣的问题
