首页
社区
课程
招聘
[求助]IDA插件编程的问题:动态得到堆栈中各个变量的地址及长度
发表于: 2008-4-23 10:17 7416

[求助]IDA插件编程的问题:动态得到堆栈中各个变量的地址及长度

2008-4-23 10:17
7416
我的插件是与调试器进行交互的,下面是具体的流程:

    我的插件先在指定的地址设置断点,然后启动调试器,当调试器执行到断点后程序挂起,这时我想得到该函数的堆栈中各个变量的起始地址以及它们的长度。

    最初的想法是:得到该函数堆栈中每个字节的属性,然后根据属性的不同可以得到堆栈中各个变量的起始地址以及长度。 但fluFlags()函数不能调用(因为在头文件 byte.hpp 的声明中没有 ida_export, 不能在插件中被调用), 所以不能动态的更新堆栈中各个字节的属性(flags)。

    请问各位有没有其它的方法可以得到某个函数局部变量(该函数堆栈空间中的变量)的起始地址和长度? (我知道ida在静态分析中分析出了函数的局部变量的长度, 但我的问题是程序执行到某一断点时动态得到该函数堆栈变量的起始地址、长度等信息,不能是对静态分析结果进行词法、语法分析)

ps:
我测试了prev_head(),next_head(); prev_not_tail(ea_t ea),next_not_tail;prev_visea(ea_t ea),next_visea(ea_t ea);get_item_head(ea_t ea),get_item_end(ea_t ea)这些接口(这些都是在程序挂起后调用的),试图得到堆栈中局部变量的起始地址,但结果都和实际的情况相差很远。 然后用getFlags()输出了该函数堆栈空间的每个字节的属性,结果全部为:0x00000100 (与实际情况不符合),(我的推断:ida动态调试中,已经分析出了堆栈中各个字节的属性,但确没有把这些信息更新到.id1文件中)

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 254
活跃值: (15)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
BeQuick朋友,你提的问题很难,

对你的思路,我还没领会透,刚才在frame.hpp中搜索到一些
stack variable的字样,该头文件好像描述了一些关于
堆栈操作的一些函数,你可能已经分析过了吧。
2008-4-25 21:29
0
雪    币: 208
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
恩  谢谢你

函数堆栈的结构在funcs.hpp, frame.hpp, struct.hpp中都有描述。所以,通过这三个头文件里的接口可以获取堆栈的信息以及堆栈中定义的局部变量、参数、返回地址等信息。

我原来的想法是行不通的。
2008-4-26 11:01
0
雪    币: 254
活跃值: (15)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
4
是的,这三个头文件很重要。

查到一篇帖子,OPENRCE上的,
http://www.openrce.org/forums/posts/752
也是讨论如何操作局部变量。供你翻阅。
2008-4-27 09:05
0
游客
登录 | 注册 方可回帖
返回
//