0x01 反汇编@最简单的【main】函数

1. 程序源代码(C)

int main()
{
    return 0;
}

 

2. 使用 Visual Studio 2017 查看对应的汇编代码

int main()
{
01181A70  push        ebp                   // 保存调用者(上一个函数)的 EBP(栈底)
01181A71  mov         ebp,esp               // 设置被调用者(main函数)的 EBP
01181A73  sub         esp,0C0h              // 开辟一块大小为C0的栈空间给调用者
01181A79  push        ebx                   
01181A7A  push        esi  
01181A7B  push        edi                   // 按照惯例保存调用者的三个寄存器
01181A7C  lea         edi,[ebp-0C0h]        // 获取为被调用者局部变量预留的栈空间首地址
01181A82  mov         ecx,30h               // 预留空间为 C0 Byte ,每次写入4个字节,所以C0/4=30
01181A87  mov         eax,0CCCCCCCCh        // 0xCC即烫,对应指令 int 3(软中断)
01181A8C  rep stos    dword ptr es:[edi]    // 初始化为被调用者局部变量预留的栈空间
    return 0;
01181A8E  xor         eax,eax               // 相关于 mov eax,0
}
01181A90  pop         edi  
01181A91  pop         esi  
01181A92  pop         ebx                   // 还原调用者三个寄存器
01181A93  mov         esp,ebp               // 还原调用者的 ESP (栈顶)
01181A95  pop         ebp  
01181A96  ret  

3. 汇编指令

mov         eax,0CCCCCCCCh        // 将立即数 0xCCCCCCCC 放入到寄存器 EAX 中


参考资料:《逆向工程入门指南》 《天书夜读-从汇编语言到Windows内核编程》

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值