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
我正在尝试在 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