-
-
[讨论]关于老土的遍历调用堆栈的问题。。。
-
发表于:
2012-12-6 04:44
3770
-
遍历call stack比较准确的方法是VC生成的ebp的堆栈帧,可那些二货编译器比如Intel C生成的直接用esp的怎么办。。。。ebp只是跟edi\ebx一样的变量了。。。
通过esp来便利call stack有啥好思路呢?返回地址肯定在stack中。。。我写了个小递归的程序,一个用ebp来建立堆栈帧,一个不用ebp,然后递归完成后,用Syser或者MDebug查看call stack,发现明显用ebp的被识别出来了,esp的挂了,说明这2个也是传统的ebp方法。。。
然后用OD,发现递归完成后,用esp的OD也显示返回地址了。。。结合我OD调试经验,OD经常识别“不存在”的返回地址,然后我随便在OD识别的一个堆栈帧下输个模块的代码地址,果然OD也显示返回到xxxx....
于是我蛋疼了,在没有符号文件的情况下,如何通过esp(+ebp)比较准确的遍历call stack?而不是OD那种stack中有模块的text段的地址就当作一个call的。。。
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课