在没有虚拟内存的系统上如何处理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入口点地址?的主要内容,如果未能解决你的问题,请参考以下文章