c - 在 c (Linux) 中复制 execve?

标签 c linux exec

我正在做一个项目来学习如何在 Linux 中执行程序。基本上,我试图通过在 c 程序中运行一系列系统调用来复制 execve 的功能,以获取可执行二进制文件,将其加载到内存中并成功运行它。

是否有任何相对容易理解的在线资源(或提示)可供我学习如何执行此操作?我在这方面没有太多经验,我正在努力学习。这似乎是一项相当复杂的任务,我现在完全陷入困境。

谢谢。

最佳答案

这里的主要问题是 exec 系统调用的一部分覆盖了内核中的进程描述符。这是你不能在用户空间做的事情。 即使您关闭了所有文件描述符,仍然有许多您无法访问的其他值,您也不能释放动态加载的库并释放您自己的程序的代码页(因为它们会被写保护)。

加载和运行代码文件的基本方法是将其mmap 到内存中,然后清除堆栈,解析 ELF header 并跳转到程序启动函数(程序集 请注意,jmp 指令)但是 ELF 文件还有很多内容,因此如果没有其他初始化和动态链接,它可能无法工作...

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

相关文章:

c - 如何在低级别处理 C 文件 I/O 操作?

python - 什么时候用 C 重写 Python 模块有意义?

c++ - 替换我的 C++ 程序中对 "system"的调用

linux - 64 位上的 ASLR 和内存布局 : Is it limited to the canonical part (128 TiB)?

c++ - 子进程的返回值

java - 在同一控制台中从 java 调用并运行 jar 文件

c - 如何捕获对设备文件的写入和读取

c++ - 使用多线程时性能几乎没有提高

linux - 无法从 AWS 外部通过 HTTP 连接到 EC2 实例

c - 内核如何探测驱动程序