**c语言的汇编表示(函数部分)day01**

c语言的汇编表示(函数部分)day01_2021_4_13

俗话说不学汇编的c程序员不是一个出色的c程序员,写这一篇文章目的主要是记录我的逆向学习,以供以后复习使用

学习汇编结合c一起学习会比较容易(很多学习编程的人第一步学习的就是c,应该利用起来),所以如何观察反汇编代码非常重要,我这里使用的是vs2019
反汇编之前所需要做的功课,有一些优化我们暂时不需要用到可以取消掉
1.配置属性,c/c++,优化,已禁用
2.c/c++常规,支持仅我的代码调试 否
3.c/c++代码生成,基本运行时检查,默认值
**
4.c/c++代码生成,安全检查,禁用安全检查
然后打开反汇编窗口
调试,窗口,反汇编
这是源码
int add(int x, int y)
{
return x + y;
}
void main()
{
int sum;
sum=add(1, 2);
return;
}
这是以上的反汇编代码
006F1779 push 2
006F177B push 1
006F177D call add (06F12ADh)
{
006F1730 push ebp
006F1731 mov ebp,esp
006F1733 sub esp,40h
006F1736 push ebx
006F1737 push esi
006F1738 push edi
006F1739 mov eax,dword ptr [x]
006F173C add eax,dword ptr [y]
006F173F pop edi
006F1740 pop esi
006F1741 pop ebx
006F1742 mov esp,ebp
006F1744 pop ebp
006F1745 ret
}
006F1782 add esp,8
006F1785 mov dword ptr [sum],eax
[sum]可以在查看选项,选择符号名中勾选取消->[ebp-4],看起来更加清晰
有的同学会发现,短短几行c代码,转成汇编代码之后增加了那么多,原来是编译器替我们做了很多工作,我们学习汇编当然不能把工作都交给编译器去做,这样就引出了裸函数的概念
在函数的名称前面加上这样的申明
int _declspec(naked) add(int x, int y)
这样编译器就不会帮我们去添加那些代码,当然如果我们也不去手动添加的话那程序就无法运行

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值