程序的机器级表示

GCCC 语言编译器以汇编代码的形式产生输出,汇编代码是机器代码的文本表示,给出程序中的每一条指令。然后GCC 调用汇编器和链接器,根据汇编代码生成可执行的机器代码。

我们为什么要学习汇编语言?

  • 阅读汇编有助于我们理解编译器的优化能力,分析代码中隐含的低效率
  • 不同线程是如何保持数据私有或共享数据
  • 程序被攻击的许多方式涉及程序存储运行时的控制信息的方式的细节,许多攻击利用了系统程序中的漏洞重写信息,获取系统的控制权

我们需要了解编译器在将c语言转化为机器代码时转化,优化编译器能重新排列执行顺序,,消除不必要的计算,用快速操作替代慢速操作.这是一种逆向工程(Reverse Engineering)

基于x86-64,关注GCC和Linux使用的特性

程序计数器:PC、x86-64用%rip表示,给出将要执行的下一条指令在内存中的指令