首页
社区
课程
招聘
[求助]二进制函数参数疑问?
发表于: 2016-6-8 09:42 6592

[求助]二进制函数参数疑问?

2016-6-8 09:42
6592
.text:004012BA On_Flash_Mouse_sub_4012BA proc near     ; DATA XREF: .rdata:00425E9Co
.text:004012BA
.text:004012BA n2              = byte ptr -0Ch
.text:004012BA var_B           = byte ptr -0Bh
.text:004012BA var_A           = byte ptr -0Ah
.text:004012BA var_9           = byte ptr -9
.text:004012BA var_8           = byte ptr -8
.text:004012BA n4              = dword ptr -4
.text:004012BA
.text:004012BA                 push    ebp
.text:004012BB                 mov     ebp, esp
.text:004012BD                 sub     esp, 0Ch
.text:004012C0                 push    esi
.text:004012C1                 push    TRUE            ; int
.text:004012C3                 mov     esi, ecx
.text:004012C5                 call    ?UpdateData@CWnd@@QAEHH@Z ;
.text:004012CA                 mov     ecx, [esi+88h]  ; n1
.text:004012D0                 and     [ebp+n4], 0
.text:004012D4                 test    ecx, ecx
.text:004012D6                 jz      loc_4013C6
.text:004012DC                 lea     eax, [ebp+n4]
.text:004012DF                 push    eax             ; n4
.text:004012E0                 push    5               ; n3
.text:004012E2                 lea     eax, [ebp+n2]
.text:004012E5                 push    eax             ; n2
.text:004012E6                 mov     [ebp+n2], 0F6h
.text:004012EA                mov     [ebp+var_B], 1
.text:004012EE                mov     [ebp+var_A], 49h
.text:004012F2                mov     [ebp+var_9], 43h
.text:004012F6                mov     [ebp+var_8], 50h
.text:004012FA                call    judge_fw_version_sub_402F4D
.text:004012FF                 cmp     [ebp+n4], 1
.text:00401303                 jnz     short loc_401363

-------------------------------------------------------
(1)请问大家怎么判断judge_fw_version_sub_402F4D函数参数个数和类型?这个函数有几个参数?各是什么类型?
(2) mov     [ebp+var_8], 50h;这句话是对 judge_fw_version_sub_402F4D函数参数的赋值吗?函数参数不都是入栈吗?
谢谢大家!

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

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 1
活跃值: (1174)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
IDA不是标识清楚了,4个参数,其中ecx是this指针,另外3个通过栈传递

ebp+n2 ->  这里是个结构,压栈的是结构变量的地址,可以在IDA里自己增加结构定义
5          ->   有可能是结构size(5字节)?
ebp+n4 ->  函数的出参数,在这里返回结果。压栈的也是地址
2016-6-8 18:23
0
雪    币: 5488
活跃值: (2532)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
多谢!再请教你: 怎么写C/C++代码才能出现这样的汇编(这个代码是VC++的),即Call指令之前没有紧跟着push指令(而是 mov     [ebp+var_8], 50h 类似的指令)。
2016-6-9 11:10
0
雪    币: 292
活跃值: (850)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
4
[QUOTE=dolphinzhu;1433136]多谢!再请教你: 怎么写C/C++代码才能出现这样的汇编(这个代码是VC++的),即Call指令之前没有紧跟着push指令(而是 mov     [ebp+var_8], 50h 类似的指令)。[/QUOTE]

具体情况具体分析吧,其实不用特别纠结这个问题,有时候IDA就会帮你把这些事情做了,出现这种情况有很多啊,比如全局变量赋值,比如结构体的赋值,IDA的F5插件有一个功能是Copy to assembly,会把伪代码显示在对应汇编代码段的起始位置,看一下就很清晰啦
2016-6-9 15:24
0
雪    币: 5488
活跃值: (2532)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
多谢!Keoyo。又学会一招!
2016-6-11 11:32
0
游客
登录 | 注册 方可回帖
返回
//