2015-11-14 40 views
-5

我知道一个加载程序将一个程序加载到内存中。但是,我如何使用程序来实现它?使用程序集或C这可能非常有用。或者引用一个参考。如何使用程序实现加载程序?

+1

太广泛了...... –

+0

至少有一个参考。 – prog481

+0

当然你也有能力谷歌搜索?请在再次发布StackOverflow之前阅读如何提出问题。 –

回答

1

我觉得好像做我认为你正在尝试做的最好的方式是分叉一个进程,并创建一个进程内运行?这就是说,如果你最好用unistd.h库,用C和C++,并且如果你想要更直接一点PThreads库。但是,如果您目前不知道如何调用这些东西,那么在您错误地创建叉子炸弹之前,我建议您仔细阅读,并使系统崩溃。如果需要,请查看openpub文档。不过,我强烈建议清理这个问题,而且我也觉得它在这个网站上也经常被问到。

2

也许你已经明白这一点,不确定。高级别的程序加载器只是读取/下载/接受程序,如果需要则解析文件格式。将程序放在内存中,并跳转/分支到它。

现在,如果您具体了解一个处理器的启动引导器,您通常还没有文件系统或者这样的事情,那么也许您只能接受已经在闪存上的程序,您的主要用例之一,或者允许开发人员下载测试版本,注定是闪存,xmodem,ymodem或其他协议上的程序。也许如果有以太网那么这种方式或USB如果可用,并使感应或可移动媒体(SD卡等)。在一天结束时,你仍然支持某种类型的格式,无论是程序的原始内存映像还是某些其他格式(intel hex,motorola srecord,也许是elf等)。

操作系统有更多的工作要做,因为现在需要windows或linux或mac,编写一个简单的应用程序来读取和解析一个简单的程序,将该程序读入应用程序的内存空间或malloc中, ,然后尝试分支到它。操作系统阻止你,有办法解决这个问题,但这不是重点,你是一个应用程序,你不是操作系统。但是,如果您是操作系统加载程序,那么您只需拥有更多权限,即设计了您的文件格式的操作系统,同意的入口点地址,用于应用程序调用的系统界面等等。程序必须符合你的规则,然后读取二进制文件,解析它(也许你只支持.elf文件格式),根据你的规则为程序分配内存,并根据程序分配资源(理想情况下,最初是部分),根据您的操作系统规则设置虚拟地址空间并将其指向程序已加载的位置,然后转到程序从超级用户更改为用户模式的程序。

虽然你的问题非常含糊,但如果你理解了基础知识并希望获得详细信息(如果应用程序不是具有保护功能的操作系统上的加载程序,那么只需阅读linux或bsd等的源代码即可)了解基础知识(为微控制器制作一个小引导程序,或者如果您不想购买微控制器,请使用指令集仿真程序)。

相关问题