我試圖在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