首页
社区
课程
招聘
反汇
发表于: 2006-6-17 21:07 3867

反汇

2006-6-17 21:07
3867
#include <iostream>

int main()
{

}

0x4013e0 push ebp
0x4013e1 mov  ebp,esp
0x4013e3 sub  esp,0x8\\留8个字节的空间是main()的参数空间吗?
0x4013e6 and  esp,0xfffffff0\\为什么要要进行这一步,问了许多人都说不明白???
0x4013e9 mov  eax,0x0\\从这里
0x4013ee add  eax,0xf
0x4013f1 add  eax,0xf
0x4013f4 shr  eax,0x4\\到这里都看不明白,原程序是空的,为什么进行这么多
                      无谓的操作;它是什么意思?这是我的重点问题???!!!
0x4013f7 shl  eax,0x4\\这里也一样,不知道是什么意思?
0x4013fa mov  DWORD PTR [ebp-4],eax\\??
0x4013fd mov  eax,DWORD [ebp-4]\\???
0x401400 call 0x40cff0 <_alloca>
0x401405 call 0x40cc90 <_main>
0x40140a mov  eax,0x0
0x40140f leave
0x401410 ret

同样,当我用vc6.0调试时,却时这样的,为什么是sub esp,40h

    int main()
4:    {
00401030   push        ebp
00401031   mov         ebp,esp
00401033   sub         esp,40h
00401036   push        ebx
00401037   push        esi
00401038   push        edi
00401039   lea         edi,[ebp-40h]\\???
0040103C   mov         ecx,10h\\???
00401041   mov         eax,0CCCCCCCCh\\???
00401046   rep stos    dword ptr [edi]
5:    return 0;

[课程]Linux pwn 探索篇!

收藏
免费 0
支持
分享
最新回复 (7)
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
你问的问题也是我刚学汇编时遇到的难题,其实很简单,你现在看代码只是一行一行的理解,没办法把代码,地址,函数,连起来理解.所以每一行代码看起来都很怪异.
我当初就是硬着头皮多看代码,多看一些有关函数和地址的质料,才过这一关的
2006-6-17 22:15
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
能不能详细点,我是个急性子,
2006-6-28 21:49
0
雪    币: 331
活跃值: (56)
能力值: ( LV13,RANK:410 )
在线值:
发帖
回帖
粉丝
4
你没发现你给的两段代码的地址都不一样吗?
2006-6-28 23:19
0
雪    币: 331
活跃值: (56)
能力值: ( LV13,RANK:410 )
在线值:
发帖
回帖
粉丝
5
第一段汇编代码还没到Main(),还在系统的启动代码里。
第二段才是main()的代码,用高级语言编译器成生成的程序,不光只有你写的代码。
2006-6-28 23:23
0
雪    币: 291
活跃值: (213)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
6
********************************************************
0x4013e6 and  esp,0xfffffff0\\为什么要要进行这一步,问了许多人都说不明白???
********************************************************
进行这步的目的是要让堆栈按16字节对齐,这可以在编译器中设置
2006-6-29 00:29
0
雪    币: 44229
活跃值: (19960)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
7
最初由 cform 发布
同样,当我用vc6.0调试时,却时这样的,为什么是sub esp,40h


局部变量

http://bbs.pediy.com/showthread.php?s=&threadid=769
三. 基础知识
2006-6-29 08:50
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
前者是用g++编译的,后者是用vc6

and  esp,0xfffffff0\\为什么要要进行这一步,问了许多人都说不明白???
0x4013e9 mov  eax,0x0\\从这里
0x4013ee add  eax,0xf
0x4013f1 add  eax,0xf
0x4013f4 shr  eax,0x4\\到这里都看不明白,原程序是空的,为什么进行这么多
                      无谓的操作;它是什么意思?这是我的重点问题???!!!
0x4013f7 shl  eax,0x4\\这里也一样,不知道是什么意思?
2006-7-8 19:50
0
游客
登录 | 注册 方可回帖
返回
//