gpt4 book ai didi

c - 在 Mac OS X 上组装和链接 gcc 生成的程序集

转载 作者:行者123 更新时间:2023-12-01 02:41:05 27 4
gpt4 key购买 nike

如果我有如下C代码

int main()
{
return 77;
}

我可以在 clang 上使用 -S 选项生成 asm 代码以获得以下内容(Intel 语法)

$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代码然后链接呢?

最佳答案

  1. 是的,gcc 生成正确的汇编代码。

  2. 它只是as

  3. 您应该能够使用 as 进行组装并使用 ld 进行链接:

    as -o example.o example.s
    ld -macosx_version_min 10.8.0 -o example example.o -lSystem

    或者,使用 gccclang 作为前端可能更容易:

    cc -o example example.s

编辑:完整的工作示例:

$ cat example.c 
int main()
{
return 77;
}
$ gcc -S example.c -o example.s
$ as -o example.o example.s
$ ld -macosx_version_min 10.8.0 -o example example.o -lSystem
$ ./example
$ echo $?
77

好的,既然您使用的是 clang,那么您可能也想使用它的汇编程序。混合和匹配工具链通常以泪水告终:

$ clang -cc1as -filetype obj -mllvm --x86-asm-syntax=intel -o example.o example.s
$ ld -macosx_version_min 10.8.0 -o example example.o -lSystem

关于c - 在 Mac OS X 上组装和链接 gcc 生成的程序集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18578347/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com