gpt4 book ai didi

macos - 64 位 Mac OS X Lion 上的 nasm/gcc 问题

转载 作者:行者123 更新时间:2023-12-04 10:05:11 24 4
gpt4 key购买 nike

我在看 this文章,
有一次它给了我这个 nasm 程序:

; tiny.asm
BITS 32
GLOBAL main
SECTION .text
main:
mov eax, 42
ret

并告诉我运行以下命令:
$ nasm -f elf tiny.asm
$ gcc -Wall -s tiny.o

我收到以下错误:
ld: warning: option -s is obsolete and being ignored
ld: warning: ignoring file tiny.o, file was built for unsupported file format which is not the architecture being linked (x86_64)
Undefined symbols for architecture x86_64:
"_main", referenced from:
start in crt1.10.6.o
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status

我冒险猜测可能是什么问题,并将 BITS 行更改为:
 BITS 64

但是当我运行时 nasm -f elf tiny.asm我得到:
tiny.asm:2: error: `64' is not a valid segment size; must be 16 or 32

如何修改代码以在我的机器上工作?

编辑:

我从评论中接受了亚历克斯的建议并下载了一个更新的版本。然而,
./nasm-2.09.10/nasm -f elf tiny.asm

提示
tiny.asm:2: error: elf32 output format does not support 64-bit code

另一方面,
./nasm-2.09.10/nasm -f elf64 tiny.asm
gcc -Wall -s tiny.o

提示
ld: warning: ignoring file tiny.o, file was built for unsupported file format which is not the architecture being linked (x86_64)
Undefined symbols for architecture x86_64:
"_main", referenced from:
start in crt1.10.6.o
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status

最佳答案

为了让示例正常工作,您必须进行特定于 OS X 的调整:
OS X 链接器在 main 方法前面加上了一个 _ :

; tiny.asm
BITS 32
GLOBAL _main
SECTION .text
_main:
mov eax, 42
ret

第二个是你必须使用mach文件格式:
nasm -f macho tiny.asm

现在您可以链接它(使用 -m32 表示 32 位目标文件):
gcc -m32 tiny.o

关于macos - 64 位 Mac OS X Lion 上的 nasm/gcc 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9308806/

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