汇编.386是什么意思_反汇编代码还原之优化方式

5bee1a87844ecd1298812be7c703313f.png

本文为看雪论坛优秀文章

看雪论坛作者ID:TkBinary

  • 目录

  •  一. 优化方式

  •       1.1 前言

  •       1.2 优化方式分类

  •       1.3 常量折叠

  •       1.4 常量传播

  •       1.5 变量去除

  •       1.6 归并优化

  •       1.7 Cpu流水线优化

  •       1.8 数学变换优化

  •       1.9 不可达分支优化

  •        2.0 代码外提优化

  • 二. 去掉优化方式

  • 三. 总结

一. 优化方式

1.1 前言

在我们学习反汇编的时候,很多人都以为反汇编很难。其实不然,学什么都是有技巧的。   而想要锻炼我们的反汇编能力,第一就是要进行多练,第二就是熟悉底层原理,第三就是熟悉套路。   往后几篇会把C与C++的反汇编形式体现出来,如果写的不对的话请批评指正。

1.2 优化方式分类

汇编中的加法、减法、乘法、除法、取模等等都是有优化方式以及套路的。  

优化方式分为以下几种:

  • 常量折叠

  • 常量传播

  • 变量去除

  • 归并优化

  • Cpu流水线优化

  • 数学变换

  • 不可达分支优化

  • 代码外提优化

遇到新的优化再说。 那么着重介绍一下上面优化方式所代表的意思。   优化的前提是在 Release下切开启O2选项优化速度的前提 Debug版本也会优化但是更多的是方便程序员调试,所以在不影响调试的前提下才会进行优化。

1.3 常量折叠

有以下例子:
int n = 0;int m = 1;printf("%d",7 + 8);printf("%d",n + 6);printf("%d",n + m);
所谓 常量折叠就是在 编译前 所遇到的常量,是可以进行计算的。那么就会优化为一个常量值   例如上面的7+8不会产 生 add 指令,而是在程序编译后直接成为15(0xF)。   以 VC6.0VS2019 分别编译。为什么要两个编译器?目的就是让大家知道这个套路不管是几十年前的6.0还是现如今的Vs2019 都是一样的,可能会有些稍许不同,但是绝不影响你的逆向以及反汇编,而恰巧这才是真正的核心所在,包括 gcc编译 也是一样。   Vc6.0 保留核心
.text:00401000                 push    0Fh.text:00401002                 push    offset aD       ; "%d".text:00401007                 call    _printf.text:0040100C                 push    6.text:0040100E 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值