【编译、链接、装载五】编译器后端——gcc生成的汇编代码

【编译和链接五】编译器后端——gcc到汇编

  • 一. 栈回溯
    • 1. frame pointers
    • 2 .debug_frame (DWARF)
    • 3 .eh_frame (LSB)
    • 4 CFI directives
    • 5、关于.cfi结论
      • 5.1、CFI 伪指令
  • 二、寄存器
  • 三、hello world 汇编
    • 1、指令解释
      • 1.1 .cfi伪指令
      • 1.2 汇编指令
  • 四、printf和puts
  • 四、如何编译不带:调试用的调用堆栈的
  • 五、汇编语法
  • 其他、

一. 栈回溯

Unwind 栈回溯详解

1. frame pointers

在调试的时候经常需要进行堆栈回溯。最简单的方式是使用一个独立的寄存器(ebp)来保存每层函数调用的堆栈栈顶(frame pointer):

pushl%ebp 
movl%esp,%ebp 
... 
popl%ebp 
ret
  • x86_64的frame point模式
    【编译、链接、装载五】编译器后端——gcc生成的汇编代码_第1张图片

这种方式在堆栈回溯时非常方便快捷。但是这种方法也有自己的不足:

  • 需要一个专门寄存器ebp来保存frame poniter。
  • 保存ebp寄存器即保

你可能感兴趣的:(编译和链接,汇编,linux,汇编代码,gcc反汇编)