最最简单的c语言函数汇编分析

0x01 环境

xp+vc6.0

0x02 代码

int plus(int x, int y)
{
    return 0;
}

以下是vc6.0的反汇编窗口

1:    int plus(int x, int y)
2:    {
00401020   push        ebp
00401021   mov         ebp,esp
00401023   sub         esp,40h
00401026   push        ebx
00401027   push        esi
00401028   push        edi
00401029   lea         edi,[ebp-40h]
0040102C   mov         ecx,10h
00401031   mov         eax,0CCCCCCCCh
00401036   rep stos    dword ptr [edi]
3:        return 0;
00401038   xor         eax,eax
4:    }
0040103A   pop         edi
0040103B   pop         esi
0040103C   pop         ebx
0040103D   mov         esp,ebp
0040103F   pop         ebp
00401040   ret

0x03 分析

push      ebp
mov       ebp,esp
sub       esp,40h
//提升栈,为函数腾出空间,为ebp寻址做准备
push      ebx
push      esi
push      edi
//寄存器压栈,保存现场
lea       edi,[ebp-40h]
//将ebp-40h(esp)的具体内存地址存到edi
mov       ecx,10h
//10(十六进制)存入计数寄存器
mov       eax,0xCCCCCCCC
//初始化eax
rep stos  dword ptr [edi]
//用eax中的值初始化到es:[edi]指向的地址,长度为dword,循环执行次数为eax中的值(恰好ebp->esp全部被初始化)
xor       eax,eax
//eax清零
pop       edi
pop       esi
pop       ebx
mov       esp,ebp
pop       ebp
ret
//寄存器出栈,恢复现场,堆栈平衡并返回

转载于:https://www.cnblogs.com/Akkuman/p/7484404.html

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值