开发者社区> 问答> 正文

将参数传递给execve syscall的最简单方法

据说,将参数传递给execve syscall非常简单。

在教程中,讲师说这只是一行,请将其保留为练习。

下面的代码执行“ ls”命令。我正在尝试执行“ ls -la”之类的东西。搜索和搜索后,我仍然不知道在何处添加“ -la”!

我知道它在ecx寄存器指向的结构中,并且必须以null终止。现在,ecx包含一个到/ bin / ls的地址。参数应该是另一个地址吗?argv是一个数组,第一个元素是“ / bin / ls” ...

global _start

section .text
_start:
        xor eax, eax
        push eax

        push 0x736c2f6e 
        push 0x69622f2f ; //bin/ls

        mov ebx, esp

        push eax
        mov edx, esp

        push ebx
        mov ecx, esp

        mov al, 11
        int 0x80

展开
收起
祖安文状元 2020-01-07 14:25:47 541 0
1 条回答
写回答
取消 提交回答
  • 您必须将-la参数保存在ecx寄存器中并将其复制到esp寄存器中(我的意思是在堆栈中)

    push eax
    push byte 0x61
    push word 0x6c2d 
    mov ecx, esp ; -la
    
    

    以下是您修改的代码:

    global _start
    
    section .text
    _start:
    
    xor eax, eax
    
    push eax
    push byte 0x61
    push word 0x6c2d    
    mov ecx, esp ; -la
    
    push eax
    push 0x736c2f6e
    push 0x69622f2f ; //bin/ls
    mov ebx, esp
    
    push edx
    push ecx
    push ebx
    mov ecx, esp
    
    mov al, 11
    int 0x80
    
    2020-01-07 14:25:57
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载