本文为看雪论坛优秀文章
看雪论坛作者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流水线优化
数学变换
不可达分支优化
代码外提优化
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.0 与
VS2019 分别编译。为什么要两个编译器?目的就是让大家知道这个套路不管是几十年前的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