使用argv[]汇编调用bash命令

问题描述 投票:0回答:1

我对装配非常陌生,我正在尝试致电:

/bin/bash -c "echo hello; ls -la"

我将“/bin/bash”命令存储为字符串,并将其地址存储在 RBX 和 RDI 中。 我最后执行的 execve 系统调用在 RAX 上为 59。 -c 将 RSI 作为第二个参数,第三个参数为 echo 行。 这是 gdb 在系统调用行之前在寄存器中看到的内容。

RBX: 0x4000b3 ("/bin/bash")
RCX: 0x0 
RDX: 0x4000c8 ("\"echo hello; ls -la\"")
RSI: 0x4000c5 --> 0x6f6863652200632d ('-c')
RDI: 0x4000b3 ("/bin/bash")
RBP: 0x0 
RSP: 0x7fffffffe0e0 --> 0x1 
RIP: 0x4000a7 --> 0xe8050f0000003bb8 

但是当我启动可执行文件时什么也没有发生。我认为寄存器用于

argv[]
参数。

我调试了程序,老实说我不知道出了什么问题,但话又说回来,我真的很新,所以也许我实际上并没有向系统调用提供参数?

bash assembly cpu-registers
1个回答
0
投票

尝试将命令字符串拆分为单独的参数并将它们的地址存储在内存中。还要确保“argv[]”和“envp[]”数组中的最后一个参数是 NULL 指针以终止数组。

© www.soinside.com 2019 - 2024. All rights reserved.