在没有虚拟内存的系统上如何处理ELF入口点地址?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在没有虚拟内存的系统上如何处理ELF入口点地址?相关的知识,希望对你有一定的参考价值。

在具有MMU和支持virtual memory的系统上,多个ELFs,且同时加载了相同的入口点它们的入口点只是虚拟地址,并被转换为运行时的物理内存地址。例如,在我的amd64机器.text部分始终映射到地址0x00400000,并且_start始终靠近该地址。但是它如何在系统上工作 MMU?他们中的许多人可能不支持多任务处理所有。开发人员有责任通过以下方式选择ELF入口点吗?手,以免它们重叠?

答案
短篇小说,无论如何都无法处理。

现在有一个长话。

ELF不能按原样执行,它是带有可执行数据的容器。在具有OS和MMU的系统中,OS创建一个进程以及该进程的相应MMU页表。之后,读取ELF,并根据ELF文件中的数据将可执行代码和数据段(BSS)复制到此新分配的过程存储器中。完成后,将程序计数器设置为入口点地址。您的程序运行。万岁。

要强调的重要一点是,每个进程都有自己的虚拟内存,该虚拟内存映射到唯一的物理内存中。因此,对于不同的进程,虚拟地址可能会重叠或相同,而物理地址在任何给定时刻始终是不同的。

现在有一个没有MMU的系统。因此,没有虚拟内存,每个进程都应放置在唯一的物理内存区域中,并链接到该精确的内存区域。

在现实生活中,如果没有使用MMU ELF文件的小型系统,根本就不会使用。选项1,将所有应用链接在一起成为一个大二进制文件。选项2,使用唯一地址单独链接的应用程序,使用“ objcopy”实用程序提取可执行信息,并将二进制文件复制到系统中以供执行。 “ OS”应该具有启动这些“进程”的入口点列表。

以上是关于在没有虚拟内存的系统上如何处理ELF入口点地址?的主要内容,如果未能解决你的问题,请参考以下文章

这张关于 NEAR 平台上如何处理交易的图片有多准确?

VMware虚拟机里提示虚拟内存过小,如何处理?

美团面试——餐饮系统开发

现代虚拟机如何处理内存分配?

DLL 如何处理来自多个进程的并发?

Centos7中查看IP地址命令ifconfig无法识别如何处理