首页
社区
课程
招聘
[讨论]IDA 能否处理函数指针
发表于: 2009-6-19 02:17 8090

[讨论]IDA 能否处理函数指针

2009-6-19 02:17
8090
今天调试Ntfs,向上追踪函数指针, 再也无法发现是谁调用函数指针,
函数指针 .data:0004DBDC                 dd offset sub_3E860,
0004DBDC也就是一个全局变量,IDA应该能找出对它的所有访问,
可我找遍,也没发现这个功能.

IDA究竟有没有查找对全局变量的引用的功能?
如没有,各位高手,遇倒以上情况,如何处理?
急啊!

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 211
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2

这么重要问题,居然没人关心,没天理,

发现象结构体内部的指针,指针数组,函数虚表(函数指针数组), 都无法处理,
IDA Pro只对结构体起始变量,指针数组第一元素,才会生成交叉引用.

typedef void (*FUNC)();
FUNC pf[2] = {pf1,pf2};

.text:00401070                 mov    ecx, pt[esi*4]
.text:00401077                 test    ecx, ecx
.text:00401079                 jz      short loc_401089
.text:0040107B                 mov     eax, [ecx]
.text:0040107D                 mov     edx, [eax+4]
.text:00401082                 call    edx
IDA Pro 居然无法识别,call edx 实际就是 call pf2.
这样一来, 从pf2函数开始分析,就无法直接攻取函数调用流程.

事实上,IDA Pro可能只是通过读取reloc直接获取交叉引用信息,而不是对汇编结果进行逻辑分析,
真可惜了IDA Pro强大反汇编功能.

各位难道没有困惑吧?
还是高手胸怀有利器,秘而不宣,
2009-6-19 10:47
0
雪    币: 419
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
call dword ptr [0004DBDCh]

如果是这样可以搜苏常量 0004DBDCh

call dword ptr [r32+const]

这样的只能碰运气,上下翻翻代码了

如果不方便调试,可以这样子

data:0004DBDC                 dd offset sub_3E860,

替换 sub_3E860  输出调用的信息即可
2009-6-19 11:22
0
雪    币: 224
活跃值: (16)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
4
的确是个问题,如果将函数指针存在一个大结构体的成员中,确实是个麻烦
2009-6-19 11:26
0
雪    币: 197
活跃值: (52)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
5
IDA有交叉引用功能呀, 点住dd offset sub_3E860, 按CTRL+X
这个对全局的函数或变量可以使用
2009-6-19 15:11
0
雪    币: 204
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
常识问题嘛,ida只是静态分析工具,函数指针通常都是动态计算的,特别是c++里面

用ida调试一下还可以吧,不过没有用过ida的调试器。
2009-6-19 15:38
0
雪    币: 211
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
函数指针动态计算,
mov r32,[r32+const]
mov r32,[r32+inx*ss]
mov r32,base[inx*ss]
主要识别以上三种,看来可以写个插件,谁有吧?
2009-6-19 20:55
0
游客
登录 | 注册 方可回帖
返回
//