【问题标题】:Assembly: Exit Code Wrong装配:退出代码错误
【发布时间】:2015-08-29 03:35:33
【问题描述】:

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

.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

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

组装和链接命令:

as exit.asm -o exit.o
ld exit.o -e _main -o exit
./exit

【问题讨论】:

  • 这是用于什么操作系统的?看起来你想瞄准达尔文?
  • @icktoofay 是的,我目前正在运行 OS X 10.11 El Capitan

标签: assembly x86-64 exit system-calls darwin


【解决方案1】:

退出代码进入%edi,而不是%ebx。 (我不确定这方面的规范参考;我只是反复试验。)

【讨论】:

  • OS/X 64 位使用System V AMD64 ABI 约定。系统调用中的第一个参数作为%rdi 传递。 Exit 接受一个参数(返回码),因此它被放置在%rdi
猜你喜欢
  • 2021-06-24
  • 1970-01-01
  • 1970-01-01
  • 2018-08-27
  • 2013-09-28
  • 2012-03-01
  • 2016-10-26
  • 2021-06-21
  • 1970-01-01
相关资源
最近更新 更多