汇编:退出代码错误

saf*_*yeh 1 assembly x86-64 darwin system-calls exit

我正在学习汇编,我创建了一个简单的退出程序。

.section __DATA, __data
.section __TEXT, __text
.globl _main

_main:
  movl $0x2000001, %eax   #System call exit, offset by 0x00000
  movl $1, %ebx           #Exit Return code
  syscall                 #Wakes up kernal to run the systen call
Run Code Online (Sandbox Code Playgroud)

运行文件后如何回显 $?返回 0

组装和链接命令:

as exit.asm -o exit.o
ld exit.o -e _main -o exit
./exit
Run Code Online (Sandbox Code Playgroud)

ick*_*fay 5

退出代码输入%edi,而不是%ebx。(I\xe2\x80\x99m 不确定这方面的规范参考;我只是使用了反复试验。)

\n

  • OS/X 64 位使用 [System V AMD64 ABI](http://x86-64.org/documentation/abi.pdf) 约定。系统调用中的第一个参数作为“%rdi”传递。Exit 接受一个参数(返回码),因此它被放置在 `%rdi` 中 (4认同)