gpt4 book ai didi

Linux Sys_execve 不会在汇编中运行

转载 作者:太空宇宙 更新时间:2023-11-04 10:23:41 29 4
gpt4 key购买 nike

我正在编写一个汇编程序,它需要调用 netcat 并通过 Internet 执行程序。

据我了解,对于 execve 命令,您将 EBX 寄存器指向您要运行的程序,并在末尾添加一个空字节以终止。您将 ECX 寄存器指向由空字节分隔的参数,在参数列表的末尾有 2 个空字节。您只需将 EDX 设置为一堆空字节。

在我的命令 int0x80 中执行命令时,我的寄存器如下所示:

Eax : 11 #系统调用
EBX: 0x0783140 #/bin//nc
ECX: 0x078314a #args
EDX:0x07831a4 #env

这是 0x0783140 处内存的 ascii 值:

[空字节] = 0x00

/bin//nc[空字节]127.0.0.1[空字节]18833[空字节]-e[空字节]/bin/sh[空字节][空字节]

EBX 指向'/bin//nc'
ECX 指向 '127.0.0.1'
RDX 只是指向一堆空字节

程序将到达 int 0x80 调用,但它会立即返回并将 0xfffffff2 放入 EAX 寄存器。

任何帮助都会很棒。

编辑:多亏了 ephemient,我现在能够实际运行 netcat,但不知何故我认为我的 args 没有被程序正确读取。我认为这是因为 netcat 运行但立即退出,退出代码为 1,并且没有与我的监听器建立连接。

ecx 现在指向内存中的这个(注意我在地址之间放置了空格以提高可读性,但它们在我的程序中不存在):

0x78315e 0x783168 0x78316e 0x783171 0x00000000

0x78315e => 127.0.0.1[Null Byte]
0x783168 => 18833[Null Byte]
0x78316e => -e[Null Byte]
0x783171 => /root/myprogram[Null Byte]

我已经四重检查地址是否实际指向上面的 akii 值

最佳答案

您得到 errno=EFAULT (0xfffffff2 = -14, 14 = EFAULT),表明您向系统调用传递了错误地址。

SYS_execve 有 3 个参数,但第二个和第三个是指向参数/环境字符串的以 NULL 结尾的指针数组,而不是单个以 nul 分隔的组件字符串。将字符串解释为指针数组,意味着字符串的前 4 个字节被解释为第一个字符串的地址,但它不是有效地址,因此 EFAULT。

SYSCALL_DEFINE3(execve,
const char __user *, filename,
const char __user *const __user *, argv,
const char __user *const __user *, envp)

关于Linux Sys_execve 不会在汇编中运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42680215/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com