相关疑难解决方法(0)

当我没有指定操作数大小时,push指令压入堆栈的字节数是多少?

我可以通过这样做将4个字节压入堆栈:

push DWORD 123
Run Code Online (Sandbox Code Playgroud)

但我发现我可以在push不指定操作数大小的情况下使用:

push 123
Run Code Online (Sandbox Code Playgroud)

在这种情况下,push指令将多少字节压入堆栈?推送的字节数是否取决于操作数大小(因此在我的示例中它将推送1个字节)?

x86 assembly

11
推荐指数
2
解决办法
7188
查看次数

在栈上为execve创建一个arg数组

我想编写一个汇编程序,该程序通过 EXECVE(系统调用 #0x3C)程序 /bin/ls 和开关 -al 执行。

手册页 (man 2 execve) 指出调用需要三个值:

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

我不太明白如何建立三个论点。据我所知,第一个参数进入RDI,第二个进入RSI,第三个进入RDX。我相信设置第一个就足够了

    push 0x736c2f2f         ;sl//
    push 0x6e69622f         ;nib/
    mov rdi, rsp
Run Code Online (Sandbox Code Playgroud)

对于第三个,事情很简单:

    xor r11, r11
    mov rdx, r11
Run Code Online (Sandbox Code Playgroud)

我的问题是我不知道如何构建第二个参数,它应该是一个包含 ['/bin//ls', '-aal']

我需要为 x86-64 编写它,所以请不要int 0x80提出建议。

assembly x86-64 shellcode

2
推荐指数
1
解决办法
479
查看次数

标签 统计

assembly ×2

shellcode ×1

x86 ×1

x86-64 ×1