我试图在64位Asm中模拟安全管execve教程(http://hackoftheday.securitytube.net/2013/04/demystifying-execve-shellcode-stack.html)。我不确定巴士错误来自哪里。我在GDB中通过应用程序,但是直到我失去框架后才发生错误。如果有人知道发生了什么,我很乐意听取您的意见。Execve调用中OS X x86_64中的总线错误
.section __DATA,__data
.section __TEXT,__text
.globl _start
_start:
xor %rax, %rax
push %rax
movabsq $0x68732f6e69622f2f, %rdi
push %rax
mov %rsp, %rsi
push %rdi
mov %rsp, %rdx
mov $0x2000059, %rax
syscall
一方面,'push'是64位在64位模式,有32位符号扩展立即。所以你最终会在堆叠中使用'2f 2f 62 69 00 00 00 00 6e 2f 73 68 00 00 00 00'。相反,你可以尝试'movabsq $ 0x68732f6e69622f2f,%rax;推%rax' – Jester
谢谢@Jester。仍然收到巴士错误。将更新我的代码以反映您的指示。 – JLegendre
你加载了'rdi',但是推了'rax'? – Jester