【发布时间】:2016-05-06 23:52:24
【问题描述】:
我正在尝试在 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 $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; push %rax -
谢谢@Jester。虽然仍然出现总线错误。将更新我的代码以反映您的指示。
-
您加载了
rdi,但推送了rax?
标签: macos assembly x86-64 execve