首页
社区
课程
招聘
[求助]ida 中函数调用
发表于: 2007-4-25 21:19 10062

[求助]ida 中函数调用

2007-4-25 21:19
10062
最近在做一个usb <-> serial 驱动的逆向,在其所用的一个dll 中,有这样两个函数调用:

1:
lea     ecx, [esi+0Ch]; // esi 为一个新分配的有关器件驱动信息的数据结构的指针
push    ecx;
push    ebx;            // ebx 也为有关器件驱动信息的数据结构的指针,但为已存在的
call    loc_10005E90 ;
。。。。。。

loc_10005E90:
            push    ebp
            mov     ebp, esp
            push    edi
            push    esi
            mov     esi, [ebp+0Ch]
。。。。。。。。。。。。
2:
mov     edx, [ecx]
mov     eax, [edx+10h]
push    ebx
call    eax
而一般函数调用大部分都为call sub_xxxxx

为什么函数调用用这种形式呢?有什么特殊用途忙?在何种情况下用这种形式,是编译器自动生成的,还是自己指定的呀
还有想弱弱的问一句:是不是在所有的windows函数调用中,当从函数返回后当前寄存器的内容都不改变(除了EAX)

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

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 325
活跃值: (97)
能力值: ( LV13,RANK:530 )
在线值:
发帖
回帖
粉丝
2
虚函数咯。 运行时确定的。
后一个问题我建议楼主翻MSDN。这个不知道还想逆向C++的驱动 ^_^楼主不要生气哈
2007-4-26 00:36
0
雪    币: 208
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
1.这种方式很有可能是没有自动识别出函数.
  一般在IDA中会经常遇到这种情况,一般是手工创建成函数.

2.虚函数调用方式
  ecx是this指针
  [ecx]是虚函数表地址
  [edx+10h]是虚函数地址,也就是第5个虚函数
2007-4-26 17:27
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
hehe,谢谢两位啦,刚接触努力中
2007-7-16 10:43
0
雪    币: 314
活跃值: (10)
能力值: ( LV12,RANK:570 )
在线值:
发帖
回帖
粉丝
5
突然想到,那么FARPROC,也就是我们先获得地址,然后调用函数,不是应该也是那个样子的吗?
2007-7-17 13:42
0
游客
登录 | 注册 方可回帖
返回
//