我通过运行下面的汇编器

clang -s hello.c


其中hello.c是以下文件名:

#include <stdio.h>

main() {

printf("Hello\n");

}


汇编器在hello.s中:

  .section  __TEXT,__text,regular,pure_instructions
  .build_version macos, 10, 14  sdk_version 10, 14
  .globl  _main                   ## -- Begin function main
  .p2align  4, 0x90
_main:                                  ## @main
  .cfi_startproc
## %bb.0:
  pushq %rbp
...

最佳答案

您可以在GAS手册中找到文档(clang / LLVM使用相同的语法,包括指令)。 https://sourceware.org/binutils/docs/as/

另请参阅https://stackoverflow.com/tags/x86/infohttps://stackoverflow.com/tags/att/info中的链接,以获取有关x86-64 AT&T语法的更多信息。

Clang / LLVM可以像GCC一样使用Intel语法,但是指令不会改变。 clang --x86-asm-syntax=intel,或者可能是-masm=intel以与GCC兼容。

在clang或LLVM手册中也可能有某些内容。 (但不要将此与LLVM-IR assembly language混淆:LLVM内部表示形式的asm语法。)通过快速搜索,我没有找到关于clang如何处理GAS指令的LLVM文档。



.globl _main不是标签本身。注意,它在对齐填充之前。它只是符号_main的属性修饰符。

_main:是输出文件中标签所应用到的位置。

要了解说明,请参见How to remove "noise" from GCC/clang assembly output?有关如何删除不相关的指令的信息。

07-24 09:46
查看更多