【发布时间】:2019-07-21 17:30:50
【问题描述】:
我有以下文件:
; 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
【问题讨论】:
-
这没什么大不了的,但是下次您想为您的问题提供答案,而不是编辑您的问题以包含答案时,请随时 post your own answer。继续将 zneak 的答案作为“已接受”的答案(因为他确实值得称赞),但如果您认为可以进一步阐明该主题并帮助未来的读者,请随时发布您自己的答案。
标签: macos assembly x86-64 system-calls mach