学习阅读GCC汇编程序输出

por*_*uod 37 c c++ assembly gcc

我正在考虑对装配有一些非常基本的了解.我目前的目标很简单:在使用-S开关为x86/x86-64编译C/C++时,对GCC汇编器输出有非常基本的了解.

足以做一些简单的事情,例如查看单个函数并验证GCC是否优化了我希望消失的东西.

有没有人知道一个真正简洁的汇编介绍,与GCC相关,特别是为了阅读的目的,以及任何随便阅读汇编的人都应该知道的最重要的指令清单?

Wyz*_*a-- 23

你应该使用GCC的-fverbose-asm选项.它使编译器输出附加信息(以注释的形式),以便更容易理解汇编代码与原始C/C++代码的关系.


Ykt*_*ula 21

如果你正在使用gcc或clang,-masm = intel参数告诉编译器使用Intel语法而不是AT&T语法生成程序集,并且--save-temps参数告诉编译器保存临时文件(预处理源,程序集输出)从,调用GCC目录中的,未链接的目标文件).

对所有资源都应该很容易理解x86程序集.这是一个这样的资源:http://www.cs.virginia.edu/~evans/cs216/guides/x86.html.

您也可以使用disasm和gdb来查看编译程序正在执行的操作.

  • 如果你进行GDB反汇编,你也可以使用`set disassembly-flavor intel`来获得英特尔语法. (3认同)