Execve 调用中 OS X x86_64 中的总线错误

Bus Error in OS X x86_64 in Execve call

我正在尝试在 64 位 Asm 中模仿 Security Tubes execve 教程 (http://hackoftheday.securitytube.net/2013/04/demystifying-execve-shellcode-stack.html)。我不确定总线错误来自何处。我逐步浏览了 GDB 中的应用程序,但直到我超出框架后才出现错误。如果有人知道发生了什么,我很乐意听取您的意见。

.section __DATA,__data
.section __TEXT,__text
.globl _start
_start:
    xor %rax, %rax
    push %rax
    movabsq [=12=]x68732f6e69622f2f, %rdi
    push %rax
    mov %rsp, %rsi
    push %rdi
    mov %rsp, %rdx
    mov [=12=]x2000059, %rax
    syscall

以下应该更好用,但我没有 osx 来测试:

.globl _start
_start:
    xor %edx, %edx                    ; NULL for env
    movabsq [=10=]x0068732f6e69622f, %rax ; /bin/sh<0>
    push %rax
    mov %rsp, %rdi                    ; filename
    push %rdx                         ; NULL for argv terminator
    push %rdi                         ; argv[0] = filename
    mov %rsp, %rsi                    ; argv
    mov [=10=]x200003b, %eax              ; I think 59 is decimal
    syscall