Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
我正在做一个项目来学习如何在 Linux 中执行程序。基本上,我试图通过在 ac 程序中运行一系列系统调用来复制 execve 的功能,以获取可执行二进制文件,将其加载到内存中并成功运行它。
是否有任何相对易于理解的在线资源(或提示)我可以用来学习如何做到这一点?我对此没有太多经验,我正在努力学习。这似乎是一项相当复杂的任务,而我现在完全陷入困境。
谢谢你。
您的主要问题是exec系统调用的一部分覆盖了内核中的进程描述符。这是您在用户空间中无法做到的事情。即使您关闭所有文件描述符,仍然有很多其他值是您无法达到的,您也无法释放动态加载的库并释放您自己的程序代码页(因为它们会被写保护)。
exec
加载和运行代码文件的基本方法是将mmap其放入内存,然后清除堆栈,解析 ELF 标头并跳转到程序启动函数(jmp请注意汇编指令)但是 ELF 文件还有更多内容,所以如果没有其他初始化和动态链接,它可能无法工作......
mmap
jmp