我正在尝试在汇编中编写shellcode。我需要执行/usr/bin/killall
命令和/usr/bin/wget
命令。我在shellcode中使用execve()
系统调用完成了两个命令。但是现在我想要将这两个结合起来,但这是不可能的,因为程序在执行第一个execve()
调用时退出。 (来自execve()
:execve()
的手册页未成功返回。)
如何执行2次execve()
来电?或者是否有另一种方法可以从同一个shell代码中调用/usr/bin/killall
和/usr/bin/wget
?
提前致谢并提前致谢!
答案 0 :(得分:5)
当您使用exec-family函数时,您调用它的程序将替换为当前进程。因此,当第一次执行execve时,您的整个过程图像将消失,因此永远不会进行第二次调用。要解决这个问题,你必须在调用execve之前分叉另一个进程。
答案 1 :(得分:1)
首先,不可能一个接一个地执行两个execve()
。只是因为根据定义,execve()
调用将使用新进程覆盖原始进程的内存,您将永远无法再次切换回原始进程。
如果/usr/bin/killall
命令没有终止执行shellcode本身的进程,那么你建议的第二个选项(将/usr/bin/wget
和killall
合并到shellcode中)是完全可能的。如果是这种情况,我真的需要更多关于为什么需要这种行为的信息,因为它对我来说似乎有点荒谬(但我肯定会错过你运行shellcode的上下文)。