首页
社区
课程
招聘
vc反汇编代码
发表于: 2004-6-6 17:56 8644

vc反汇编代码

2004-6-6 17:56
8644
3:    int add(int a, int b)
4:    {
00401010   push        ebp
00401011   mov         ebp,esp
00401013   sub         esp,40h
00401016   push        ebx
00401017   push        esi
00401018   push        edi
00401019   lea         edi,[ebp-40h]
0040101C   mov         ecx,10h
00401021   mov         eax,0CCCCCCCCh
00401026   rep stos    dword ptr [edi]
5:        return a+b;
00401028   mov         eax,dword ptr [ebp+8]
0040102B   add         eax,dword ptr [ebp+0Ch]
6:    }
0040102E   pop         edi
0040102F   pop         esi
00401030   pop         ebx
00401031   mov         esp,ebp
00401033   pop         ebp
00401034   ret
         
         

8:    void main()
9:    {
0040D6F0   push        ebp
0040D6F1   mov         ebp,esp
0040D6F3   sub         esp,40h
0040D6F6   push        ebx
0040D6F7   push        esi
0040D6F8   push        edi
0040D6F9   lea         edi,[ebp-40h]
0040D6FC   mov         ecx,10h
0040D701   mov         eax,0CCCCCCCCh
0040D706   rep stos    dword ptr [edi]
10:       add(1, 2);
0040D708   push        2
0040D70A   push        1
0040D70C   call        @ILT+5(add) (0040100a)
0040D711   add         esp,8
11:   }
0040D714   pop         edi
0040D715   pop         esi
0040D716   pop         ebx
0040D717   add         esp,40h
0040D71A   cmp         ebp,esp
0040D71C   call        __chkesp (004010e0)
0040D721   mov         esp,ebp
0040D723   pop         ebp
0040D724   ret
         

哪位大虾能解释一下,
为什么每个函数前面都有这么一段?
0040D6F0   push        ebp
0040D6F1   mov         ebp,esp
0040D6F3   sub         esp,40h
0040D6F6   push        ebx
0040D6F7   push        esi
0040D6F8   push        edi
0040D6F9   lea         edi,[ebp-40h]
0040D6FC   mov         ecx,10h
0040D701   mov         eax,0CCCCCCCCh
0040D706   rep stos    dword ptr [edi]

尤其是
0040D6F3   sub         esp,40h


0040D6F9   lea         edi,[ebp-40h]
0040D6FC   mov         ecx,10h
0040D701   mov         eax,0CCCCCCCCh
0040D706   rep stos    dword ptr [edi]

有什么作用呢?觉得没什么用啊.

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 5
支持
分享
最新回复 (4)
雪    币: 218
活跃值: (70)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
在编程时,子程序中要有一些局部的参数,sub esp,40h是在堆栈中作一个存放参数的空间
0040D6F9 lea edi,[ebp-40h]
0040D6FC mov ecx,10h
0040D701 mov eax,0CCCCCCCCh
0040D706 rep stos dword ptr [edi]
这个我也不大明白,等待高手指教吧:D
2004-6-6 19:13
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
0040D6F9 lea edi,[ebp-40h]
0040D6FC mov ecx,10h
0040D701 mov eax,0CCCCCCCCh
0040D706 rep stos dword ptr [edi]

是初始化堆栈里的局部变量为eax的值。
2004-6-6 22:05
0
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
老兄,这是VC 中对于Debug 版本的程序的一个保护机制,放置对于堆栈操作溢出。所以申请了 40H 个堆栈空间,里面存放这都是 int 3
2004-6-7 13:01
0
雪    币: 248
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
是debug才有
2004-6-7 19:32
0
游客
登录 | 注册 方可回帖
返回
//