将参数传递给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

这不起作用:

xor eax, eax
push eax
push 0x2a632020
push 0x736c2f6e 
push 0x69622f2f ; /bin/ls  c*
mov ecx, esp
不是星

您必须将-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

代码工作正常:)

% ./list
total 4
-rwxrwxr-x 1 febri febri 512 Oct  5 07:45 list
% 

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

什么是将多个模型传递给ASP MVC视图的最简单方法

来自分类Dev

在C ++ 17中将lambda作为方法参数传递的最简单方法

来自分类Dev

将参数传递给方法

来自分类Dev

在枚举python中包含stop参数的最简单方法?

来自分类Dev

在C中使用默认参数的最简单方法

来自分类Dev

向标准查询添加参数的最简单方法

来自分类Dev

参数化异常消息的最简单方法是什么?

来自分类Dev

将匿名条件与IO混合的最简单方法

来自分类Dev

将HTML转换为WordPress系统的最简单方法

来自分类Dev

将ESC密钥与`密钥交换的最简单方法

来自分类Dev

将时间戳打印到ostream的最简单方法

来自分类Dev

将Windows安装移至SSD的最简单方法是?

来自分类Dev

将ESC密钥与`密钥交换的最简单方法

来自分类Dev

将DB记录作为数组键的最简单方法

来自分类Dev

将多位字符转换为整数的最简单方法

来自分类Dev

将方法作为参数传递给PHP

来自分类Dev

将参数传递给Java方法

来自分类Dev

将参数传递给PrivateObject方法

来自分类Dev

将参数从AsyncTask传递给方法

来自分类Dev

将方法参数传递给函数

来自分类Dev

Java代码,将参数传递给方法

来自分类Dev

将参数传递给Java方法

来自分类Dev

将函数作为参数传递给方法

来自分类Dev

将参数传递给laravel的URL :: to()方法

来自分类Dev

将参数传递给委托方法

来自分类Dev

将参数从AsyncTask传递给方法

来自分类Dev

将参数传递给模拟方法

来自分类Dev

Java代码,将参数传递给方法

来自分类Dev

将参数传递给Ajax安全方法