【发布时间】:2013-11-09 12:07:04
【问题描述】:
我这几天一直在尝试解决这个问题。显然,我太缺乏经验,无法从各种示例中理解实际代码,无论我多么努力,我都找不到足够简单的解释来理解。这真的不是我的一杯茶。
我的问题是,我能否获得一个链接(或答案),其中包含一些非常易于理解的伪代码或如何执行以下操作的说明:
在c程序中,将另一个ELF可执行文件加载到内存中,设置内存和堆栈以及所有其他必要的变量,然后执行它。
我了解基本概念,但对我来说并没有融合在一起。我检查了许多其他来源,包括 StackOverflow 上的这里,它们都太复杂了,我的白痴大脑无法理解。
谢谢。
【问题讨论】:
-
查看我对可能重复的答案:stackoverflow.com/a/10417930/379897 并注意,这样做只有在您编写操作系统时才有意义。对于正常使用,您可以通过
execve函数(或其他 exec-family 函数)“加载精灵图像”。 -
在用户级别没有简单的方法可以做到这一点。显然,内核做到了,
ld.so.1动态加载器也参与其中。但是模拟其中任何一个都不是微不足道的。 -
@R.. 我看到了那个帖子,但对我来说真的没有意义。我知道您必须将某些内容加载到内存中,但据我所知,这是完全可以理解的。该答案在一个特定问题上过于详细;我还不是很了解。
-
@Sefu:你真正想做什么?具体来说?你真的想模拟一个操作系统的执行器吗?或者你只是想运行一个程序?
-
@rici 我正在尝试编写一个给定可执行文件(elf)的程序,在用户空间中运行给定的可执行文件。据我了解,这意味着复制二进制代码,设置堆栈并将控制权传递给新程序。我只是不知道如何实现这一点。
标签: c linux memory executable elf