首页
社区
课程
招聘
[旧帖] 关于call的参数/寄存器查询的一个问题 0.00雪花
发表于: 2011-10-6 16:07 3824

[旧帖] 关于call的参数/寄存器查询的一个问题 0.00雪花

2011-10-6 16:07
3824
比如,我已经知道这个call的地址了   是   005512F0----   push ebp

但是不知道接下来的参数怎么看     

push ebp
mov ebp,esp
sub esp,44
push ebx
push esi
push edi
cmp dword ptr ss:[ebp+8],8672
jb short 00551314
cmp dword ptr ss:[ebp+8],3123
ja short 00551314
mov dword ptr ss:[ebp-4],1
jmp short 00551320
mov dword ptr ss:[ebp-4],0
mov al,byte ptr ss:[ebp-4]
pop edi
pop esi
pop ebx
mov esp,ebp
pop ebp
retn

[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 144
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
加密与解密第三版里说的很清楚,堆栈,寄存器传参,调用方式,
去看下就知道
2011-10-6 16:35
0
雪    币: 188
活跃值: (85)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
3
对于这种带有标准函数头/尾的 有一个方法
ebp+4 位置是返回后的eip地址,
ebp+8 是第一个参数地址 -- 在类似__stdcall 压栈约定的情况下
在函数中查找ebp+x (x>=8), 看x有多少个不同的值, 就至少有多少个参数

====================
至于参数顺序, 和调用约定有关了
2011-10-7 09:56
0
雪    币: 23
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
1.先得看你的程序是用的什么参数顺序;
2.确定是用寄存器 传参,还是堆栈。
然后就只有 去找这些相关的寄存器或出栈操作了。
2011-10-7 11:46
0
雪    币: 435
活跃值: (1212)
能力值: ( LV13,RANK:388 )
在线值:
发帖
回帖
粉丝
5
BOOL __cdecl fun(int x)
{
    BOOL resualt;//[ebp-4]
    if(x>0x8672 || x<0x3123)
        resualt = FALSE;
    else resualt = TRUE;
    return resualt;
}
2011-10-7 12:15
0
雪    币: 435
活跃值: (1212)
能力值: ( LV13,RANK:388 )
在线值:
发帖
回帖
粉丝
6
如三楼所说的,对于这种带有标准栈指针的函数
ebp+4 是返回地址
其余的ebp+x都是参数
ebp-x都是局部变量

至于有几个参数,单从这些还看不出来
你贴的这个是_cdecl  看看对这个sub的引用,调用之后add esp多少 就是多少参数了
如果是stdcall 那就retn 多少 就多少个参数
2011-10-7 12:33
0
游客
登录 | 注册 方可回帖
返回
//