小编JSm*_*yth的帖子

ARM,GNU汇编程序:如何将"数组"参数传递给execve()?

我正在编写一个简单的shellcode,它需要execve()一个ARM平台(Raspberry PI上的Linux)并且第二个参数被困在了execve.根据文件:

int execve(const char *filename, char *const argv[], char *const envp[]);
Run Code Online (Sandbox Code Playgroud)

如果我打电话execve("/bin/sh", {NULL}, {NULL});(从装配的角度来看),这对我来说完全削减了它:

.data

.section .rodata

.command:
        .string "/bin/sh"

.text

.globl _start

_start: 
        mov r7, #11
        ldr r0, =.command
        eor r1, r1 @ temporarily forget about argv
        eor r2, r2 @ don't mind envp too
        svc #0

        mov r7, #1
        eor r0, r0
        svc #0
Run Code Online (Sandbox Code Playgroud)

上面的程序集很好地编译,并在我的测试机器上运行时唤起shell /bin/sh.但是,我所有的麻烦都是在特定的目标盒子上没有/bin/sh本身,但只有一个符号链接busybox需要我执行类似的东西execve("/bin/busybox", {"/bin/busybox", "sh", NULL}, {NULL}).

至于我的理解,数组在内存中是连续的,所以我所要做的就是以连续的方式在内存中分配字节,然后将指针提供给我认为是"数组"的开头.考虑到这一点,我尝试了以下内容: …

linux assembly arm execve shellcode

3
推荐指数
1
解决办法
1210
查看次数

标签 统计

arm ×1

assembly ×1

execve ×1

linux ×1

shellcode ×1