为什么要在OSX上填充系统调用?

时间:2014-01-17 17:17:40

标签: macos assembly

例如,我想致电void exit(int exit_code)

main:
  push 42    ; Push the return value
  push 0     ; Pad the value before calling the interrupt 
  mov eax, 1 ; exit syscall
  int 80h    ; invoke
  ret

为什么我需要填充参数以使其正常工作?

1 个答案:

答案 0 :(得分:4)

似乎额外推送是从BSD系统调用约定继承的。

其中,int 80h指令最初位于单独的函数中,该函数在推送syscall参数后调用。这意味着由call指令引起的额外的隐式推送和预期的syscall处理程序并跳过它。由于您不使用包装器,因此必须推送另一个填充值。

http://www.freebsd.org/doc/en/books/developers-handbook/x86-system-calls.html