首页
社区
课程
招聘
[旧帖] [分享]回顾自己在看雪发第一个帖子 0.00雪花
发表于: 2008-12-17 15:08 4138

[旧帖] [分享]回顾自己在看雪发第一个帖子 0.00雪花

2008-12-17 15:08
4138
求助】反汇编问题!!!      
http://bbs.pediy.com/showthread.php?t=61353
--------------------------------------------------------------------------------
将一个简单A+B程序反汇编了一下
程序如下
#include <stdio.h>

int main ()
{
  int a,b;
  a = 1;
  b = 2;
  a += b;
  return 0;
}
反汇编程序如下;
我有以下疑问?请帮忙解决

:00401010 55                      push ebp
:00401011 8BEC                    mov ebp, esp
:00401013 83EC48                  sub esp, 00000048      ;这里给局部变量留下存储空间,如何确定为48H?:
:00401016 53                      push ebx                      ;作用是什么?
:00401017 56                      push esi                       
:00401018 57                      push edi
:00401019 8D7DB8                  lea edi, dword ptr [ebp-48]
:0040101C B912000000              mov ecx, 00000012             ;作用是什么貌似和A+B没有任何联系,为什么是00000012H?:
:00401021 B8CCCCCCCC              mov eax, CCCCCCCC              
                               ;问题同上为什么是,后面用到EAX,应该ROX,EAX EAX 才对,清空EAX的值??
:00401026 F3                      repz   
:00401027 AB                      stosd
:00401028 C745FC01000000          mov [ebp-04], 00000001
:0040102F C745F802000000          mov [ebp-08], 00000002
:00401036 8B45FC                  mov eax, dword ptr [ebp-04]
:00401039 0345F8                  add eax, dword ptr [ebp-08]
:0040103C 8945FC                  mov dword ptr [ebp-04], eax
:0040103F 33C0                    xor eax, eax
:00401041 5F                      pop edi
:00401042 5E                      pop esi
:00401043 5B                      pop ebx
:00401044 8BE5                    mov esp, ebp
:00401046 5D                      pop ebp
:00401047 C3                      ret
///////////////////////////////////////////////////////////////////////////////////////
发现自己成长了!嘿嘿!
现在来回答自己以前提的问题:
:00401016 53                      push ebx                      ;作用是什么?
:00401017 56                      push esi                       
:00401018 57                      push edi
1.为什么先要将ebx esi edi入栈 ,寄存器的使用惯例原因,约定eax,ecx,edx 由caller save, ebx esi edi由callee save!
保存他们的值后,在函数体内随便用了,退出前,把它们值pop回去!
2.:0040101C B912000000              mov ecx, 00000012             ;作用是什么貌似和A+B没有任何联系,为什么是00000012H?:
:00401021 B8CCCCCCCC              mov eax, CCCCCCCC              
                               ;问题同上为什么是,后面用到EAX,应该ROX,EAX EAX 才对,清空EAX的值??
:00401026 F3                      repz   
:00401027 AB                      stosd
这四句结合起来看!原来作用是把为保存局部变量那段空间,全部赋值为CC(INT 3),为什么是CC?安全考虑,在这段空间内放不是有效的字节码,跟shellcode有关,若出现一个
eip指向这里,那么程序只会执行INT 3

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

收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 2362
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
[QUOTE=;]...[/QUOTE]
汗  好象还没过多久吧...
2008-12-17 16:20
0
游客
登录 | 注册 方可回帖
返回
//