gpt4 book ai didi

macos - macOS Mojave 上的 x86_64 程序集退出系统调用参数?

转载 作者:行者123 更新时间:2023-12-04 20:06:51 27 4
gpt4 key购买 nike

我有以下文件:

; hello.s

.section __TEXT,__text
.globl _main
_main:
movl $0x2000001, %eax
movl $42, %ebx
syscall

我尝试按如下方式运行它:
# run.sh

as -mmacosx-version-min=10.9 hello.s -o hello.o
ld -macosx_version_min 10.9 -lSystem hello.o -e _main -o hello
./hello
echo $?

输出是:
$ ./run.sh
1

我希望它是
$ ./run.sh
42

这里有什么问题?

编辑:

根据 zneak 的回答,我们需要使用 %edi 寄存器进行系统调用,因此工作程序是:
; hello.s

.section __TEXT,__text
.globl _main
_main:
movl $0x2000001, %eax
movl $42, %edi
syscall

最佳答案

64 位 macOS 上的系统调用使用 System V ABI,因此您需要将第一个参数写入 %edi 而不是 %ebx。就像普通调用一样,系统调用的参数寄存器是 rdi、rsi、rdx、rcx、r8、r9。

当前,您得到 1,因为 rdi 包含 main 的 argc 参数,并且 shell 使用一个参数调用您的程序。

关于macos - macOS Mojave 上的 x86_64 程序集退出系统调用参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54914871/

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