我正在做一个项目来学习如何在Linux中执行程序。基本上,我试图通过在c程序中运行一系列系统调用来复制execve的功能,以获取可执行二进制文件,将其加载到内存中,并成功运行它。
有没有比较容易理解的在线资源(或技巧)我可以用来学习如何做到这一点?我没有太多的经验,我正在努力学习。这似乎是一项相当复杂的任务,我现在完全陷入了困境。
谢谢您。

最佳答案

这里的主要问题是系统调用的一部分重写了内核中的进程描述符。这是你在用户空间里做不到的。
即使关闭所有文件描述符,仍然有许多其他值无法访问,也无法释放动态加载的库并释放自己程序的代码页(因为它们将受到写保护)。
加载和运行代码文件的基本方法是将其放入内存,然后清除堆栈,解析elf头并跳转到程序启动函数(请注意,汇编exec指令),但elf文件还有更多内容,因此如果没有其他初始化和动态链接,它可能无法工作……

关于c - 在C(Linux)中复制execve?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19611426/

10-13 07:29