如果我有以下 C 代码
int main()
{
return 77;
}
我可以使用 clang 上的 -S 选项生成 asm 代码以获得以下内容(英特尔语法)
$clang -O0 -mllvm --x86-asm-syntax=intel main.c -S
然后代码是
.section __TEXT,__text,regular,pure_instructions
.globl _main
.align 4, 0x90
_main: ## @main
.cfi_startproc
## BB#0:
push RBP
Ltmp2:
.cfi_def_cfa_offset 16
Ltmp3:
.cfi_offset rbp, -16
mov RBP, RSP
Ltmp4:
.cfi_def_cfa_register rbp
mov EAX, 77
mov DWORD PTR [RBP - 4], 0
pop RBP
ret
.cfi_endproc
.subsections_via_symbols
然而,as、gas 或 nasm 都不会生成与 ld 链接的目标文件……clang 或 gcc 是否会生成真正好的“准备就绪”asm?gcc 的默认汇编程序是 gas(甚至没有安装在 mac os x 上...?对于 clang 来说不一样)。
那么如何手动组装asm代码然后链接呢?