标题:
[讨论]IDA中 已知堆栈中的某个局部变量的地址 如何知道该变量属于哪个函数?
[打印本页]
作者:
valen886
时间:
2008-7-22 09:48
标题:
[讨论]IDA中 已知堆栈中的某个局部变量的地址 如何知道该变量属于哪个函数?
[讨论]IDA中 已知堆栈中的某个局部变量的地址 如何知道该变量属于哪个函数?
信息来源:邪恶八进制信息安全团队(
www.eviloctal.com
)
文章作者:BeQuick
我的插件在strncpy()的第一条指令处设置断点,然后启动调试器,程序执行到断点挂起后,通过esp可以得到调用strncpy()时压入堆栈的参数。 得到strncpy()目标缓冲区的地址(比如为 lpDestStr, 并假设lpDestStr指向的是堆栈中的某一个缓冲区, 而不是数据段中的缓冲区)后, 如何知道lpDestStr指向的缓冲区属于哪个函数? (即该缓冲区位于哪个函数的堆栈空间中?)
注意:lpDestStr指向的缓冲区不一定位于调用strncpy()的函数中,(考虑这种情况 :fun2()中调用func1(), fun1()中调用strncpy(), 那strncpy()的目标缓冲区可能在func1()的堆栈空间中,也可能在func2()的堆栈空间中,暂时不考虑目标缓冲区位于数据段的情况)
帖子15 精华
0
积分10 阅读权限40 性别男 来自湖北 武汉 在线时间5 小时 注册时间2008-3-28 最后登录2008-5-14
查看详细资料
引用
报告
回复
TOP
让女孩一夜变的更有女人味
neilhsu
手语者
晶莹剔透§烈日灼然
作者:
阿敏
时间:
2008-7-22 09:48
已经有了缓冲区的地址
这个地址在相应函数活动记录的LocalVariable区内
Active Record Structure:
[LocalVariables]
[SavedEBP]
[ReturnAddress]
[Parameters]
那就往这个地址之后看(地址值大的方向),找这个函数的ReturnAddress
一般ReturnAddress前面都会有SavedEBP(除非用了FPO优化),分辨的方法就是这个SavedEBP值一般是一个接近并且大于它所在地址的地址值
那ReturnAddress所在的函数就是当前函数的调用者
在你所举的例子中,比如ReturnAddress在fun2()中,那也就说明当前的活动记录属于fun1()
所以缓冲区应该在fun1()中
帖子1 精华
0
积分1 阅读权限40 性别男 在线时间2 小时 注册时间2008-3-10 最后登录2008-5-12
查看详细资料
引用
报告
回复
TOP
让女孩一夜变的更有女人味
BeQuick
晶莹剔透§烈日灼然
欢迎光临 【3.A.S.T】网络安全爱好者 (http://3ast.com/)
Powered by Discuz! 7.2