首页
社区
课程
招聘
[讨论]关于老土的遍历调用堆栈的问题。。。
发表于: 2012-12-6 04:44 3769

[讨论]关于老土的遍历调用堆栈的问题。。。

2012-12-6 04:44
3769
遍历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的。。。

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 76
活跃值: (27)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
反汇编上一条指令,看是不是call xxxxxxxx
2012-12-6 09:04
0
游客
登录 | 注册 方可回帖
返回
//