首页
社区
课程
招聘
老师们过来看看,这几句大概意思是什么的。
发表于: 2012-1-9 06:01 4134

老师们过来看看,这几句大概意思是什么的。

2012-1-9 06:01
4134
push ebp
mov ebp,esp
push ecx
mov dword ptr ss:[ebp-4],ecx
mov eax,dword ptr ss:[ebp-4]
mov ecx,dword ptr ds:[eax+4]
mov edx,dword ptr ss:[ebp-4]
add ecx,dword ptr ds:[edx+C]
mov eax,dword ptr ss:[ebp-4]
call dword ptr ds:[eax+8]             ;  call 062a79f0
mov esp,ebp
pop ebp
retn

,,,,,,,,,,,,,,,,以下是我个人的理解,请老师纠正纠正吧,,,
push ebp,,,,把上次调用的返回压进栈
mov ebp,esp,,处理2栈平衡
push ecx,,,,可能是初始化啥数据进栈了
mov dword ptr ss:[ebp-4],ecx,,,求解
mov eax,dword ptr ss:[ebp-4],,,求解
mov ecx,dword ptr ds:[eax+4],,,求解
mov edx,dword ptr ss:[ebp-4],,,求解
add ecx,dword ptr ds:[edx+C],,,求解
mov eax,dword ptr ss:[ebp-4],,,求解
call dword ptr ds:[eax+8] ,,,,,求解
mov esp,ebp,,,,,,,,,,,,处理2栈平衡
pop ebp ,,,,,,,,,,,,,,清空数据,或者弹出数据。。
retn,,,,,,,,,,,,,,,,,处理完毕返回主程序

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

收藏
免费 0
支持
分享
最新回复 (9)
雪    币: 25
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
mov dword ptr ss:[ebp-4],ecx    应该是吧ecx寄存器存放到ss段中的ebp-4地址当中去。
mov eax,dword ptr ss:[ebp-4]   应该是取ss段ebp-4地址取双字节的绝对值存到到eax当中去。 //应该就是把提一提这个ecx寄存器先丢到ss段,在丢到eax寄存器里面去吧。
mov ecx,dword ptr ds:[eax+4]   应该是取ds段eax+4地址取双字节的绝对值存到到ecx当中去。
mov edx,dword ptr ss:[ebp-4]    如果没错以下同理。自己猜吧。
add ecx,dword ptr ds:[edx+C],,,求解
mov eax,dword ptr ss:[ebp-4],,,求解
call dword ptr ds:[eax+8] ,,,,,求解

我也只是学了没好久汇编的菜鸟。
2012-1-9 08:16
0
雪    币: 435
活跃值: (1277)
能力值: ( LV13,RANK:388 )
在线值:
发帖
回帖
粉丝
3
void __thiscall subXXX(int this)
{
    return (this+8)((this+4)+(this+c));
}
2012-1-9 08:58
0
雪    币: 967
活跃值: (1138)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
4
bitt 我感觉应该是个类吧
2012-1-9 09:06
0
雪    币: 435
活跃值: (1277)
能力值: ( LV13,RANK:388 )
在线值:
发帖
回帖
粉丝
5
所以我写thiscall啊 类名函数名我哪知道啊
2012-1-9 09:13
0
雪    币: 306
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
push ebp                                   ;保存原始EBP
mov ebp,esp                             ;ESP 备份到EBP
push ecx                                   ;压ECX入栈
mov dword ptr ss:[ebp-4],ecx   ;堆栈操作
mov eax,dword ptr ss:[ebp-4]   ;其实就是上面的ECX
mov ecx,dword ptr ds:[eax+4] ;取偏移吧
mov edx,dword ptr ss:[ebp-4];取原始ECX
add ecx,dword ptr ds:[edx+C];累加
mov eax,dword ptr ss:[ebp-4];取原始ECX,其实ECX就是类指针
call dword ptr ds:[eax+8]             ;  call 062a79f0 调用类的函数,ECX为新函数据类指针
mov esp,ebp                                ;恢复ESP
pop ebp                                       ;恢复EBP
retn                                             ;返回

只是一个简单的类的函数调用,没看到有参数,应该是无参调用。如果有参的话,就是第一次那个 Push操作
2012-1-9 09:31
0
雪    币: 435
活跃值: (1277)
能力值: ( LV13,RANK:388 )
在线值:
发帖
回帖
粉丝
7
那个push的就是this指针
这么写可能比较好
void __thiscall subXXX(int this)
{
    return (*(this+8))((this+4)+(this+c),this);
}
2012-1-9 09:35
0
雪    币: 793
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
push ebp                                         ; 保存前一个栈帧基址
mov ebp,esp                                    ;复制ESP  此时EBP为栈基指针
push ecx                                          ;push ecx 等效指令 sub esp,4  给局部变量分配空间
mov dword ptr ss:[ebp-4],ecx         ;第一个局部变量var1=ecx      
mov eax,dword ptr ss:[ebp-4]        ;eax=var1
mov ecx,dword ptr ds:[eax+4]        ;ecx=[offset var1+4]
mov edx,dword ptr ss:[ebp-4]        ;edx=var1
add ecx,dword ptr ds:[edx+C]        ;ecx=[offset var1+4]+[offset var1+C]
mov eax,dword ptr ss:[ebp-4]        ;eax=var1
call dword ptr ds:[eax+8]               ;调用var1+8指向的函数地址【eax+8】         
mov esp,ebp                                   ;还原esp  只要这个EBP没有改变 前面堆栈就算不平衡程序也能返回
pop ebp                                          ;前栈帧基址出栈 esp指向返回地址
retn                                                ;返回
2012-1-9 09:55
0
雪    币: 139
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
8楼的分析得好清晰啊
2012-1-9 10:45
0
雪    币: 1
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
2012-1-16 14:04
0
游客
登录 | 注册 方可回帖
返回
//