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的上下文)。