执行不好的参数

时间:2015-02-01 12:25:39

标签: linux assembly x86

我希望使用excve()下一个:/bin/sh ABC执行。 三个args是一个char数组(1个char = 1个字节),但是strace实用程序说我正在尝试执行:

execve("//bin/sh", ["//bin/sh", "ABC", 0x6e69622f, 0x68732f, ...], [/* 0 vars */]) = -1 EFAULT (Bad address)

功能:

int execve(const char* filename, char* const argv[], char* const envp[])

这是我的代码:

push 0x00434241  ; "ABC\0"
mov esi, esp     ; &"ABC\0"
push 0x0068732f  ; "/sh\0"
push 0x6e69622f  ; "/bin"
mov ebx, esp     ; &"//bin/sh\0"
push esi         ; &"ABC\0"
push ebx         ; &"//bin/sh\0"
mov ecx, esp     ; args["//bin/sh\0", "ABC\0"]
push 0           ; NULL ; NULL NULL NULL NULL
mov edx, esp     ; envp[NULL]

1 个答案:

答案 0 :(得分:1)

argv数组需要零终止。在push 0之前添加push esi