Shellcode:执行2次execve()调用

我试图在汇编中编写shellcode。 我需要执行/usr/bin/killall命令和/usr/bin/wget命令。 我有两个命令在shellcode中使用execve()系统调用完美运行。 但是现在我想要将这两个结合起来,但这是不可能的,因为程序在执行第一个execve()调用时退出。 (来自execve()的手册页: execve()在成功时不返回)。

如何执行2次execve()调用? 或者是否有另一种方法可以从同一个shell代码中调用/usr/bin/killall/usr/bin/wget

提前致谢并表示感谢!

当您使用exec-family函数时,您调用它的程序将替换为当前进程。 因此,当第一次执行execve时,您的整个过程图像都会消失,因此永远不会进行第二次调用。 要解决这个问题,你必须先调用另一个进程,然后再调用execve。

首先,不可能一个接一个地执行两个execve() 。 简单来说,根据定义, execve()调用将使用新进程覆盖原始进程的内存,您将永远无法再次切换回原始进程。

如果killall命令没有终止执行shellcode本身的进程,那么你建议的第二个选项(将/usr/bin/killall/usr/bin/wget合并到shellcode中)是完全可能的。 如果是这种情况,我真的需要更多关于为什么需要这种行为的信息,因为它对我来说似乎有点荒谬(但我肯定会错过你运行shellcode的上下文)。