【发布时间】:2017-09-12 10:12:16
【问题描述】:
我在 MAC OSX 上,我正在尝试通过汇编调用 execve 系统调用.. 他的操作码是 59 。 在linux中我必须将操作码设置为eax,然后将参数设置为其他寄存器,但这里我必须将操作码放入eax并从右到左将参数推入堆栈。
所以我需要 execve("/bin/sh",NULL,NULL),我在某个地方发现了程序集 null=0,所以我将 null 放入第二个和第三个参数中。
global start
section .text
start:
jmp string
main:
; 59 opcode
; int execve(char *fname, char **argp, char **envp);
pop ebx ;stringa
push 0x0 ;3rd param
push 0x0 ;2nd param
push ebx ;1st param
add eax,0x3b ;execve opcode
int 0x80 ;interupt
sub eax,0x3a ; exit opcode
int 0x80
string:
call main
db '/bin/sh',0
当我尝试执行它时说: 错误的系统调用:12
【问题讨论】:
-
您是否打算编写 shell 代码漏洞利用程序?我问是因为不清楚你的目标是什么,也不确定你是否知道这种代码不是编写普通程序的传统方式。
-
关于系统调用调用约定的规范问答是 stackoverflow.com/questions/2535989/…,包括 32 位 OS X / FreeBSD。
标签: macos assembly x86 nasm shellcode