如何将elf中的地址转换为物理地址

时间:2013-01-09 11:42:57

标签: linux linux-kernel operating-system elf

我知道操作系统会将elf加载到物理内存中。执行jmp elf-address时,系统将检查tlb并将elf-address转换为物理地址。我很困惑,elf-address没有段num和页面num? os如何将elf-address转换为MMU需要的内容。

我真的很困惑。 我知道linux会读取精灵和地图精灵的标题。 当页面错误发生时,内核会将elf加载到内存中并刷新页面表。 但你知道精灵地址就像是0x0804900。 如果我们想要exe jmp elf-address,内核如何映射elf-address以解决MMU可以使用的问题。 您知道MMU地址基于段num和页面num。

是否有寻找操作系统的地图表?当exec jmp elf-address时,os会先将elf-address映射到MMU地址吗? 例如: elf-address <==> MMU-address

1 个答案:

答案 0 :(得分:1)

我真的不认为Linux内核在execve(2)某些二进制ELF可执行文件时正在将该文件加载到物理RAM中。

只是将文件的某些ELF段映射到进程“address space”。您可以通过阅读来了解流程1234的地址空间。使用cat命令,伪文件/proc/1234/maps;尝试使用cat /proc/self/maps命令,该命令显示运行cat的进程的内存映射。

基本上execve(2)所做的是某种内存映射,就像mmap(2)那样。它设置MMU,因此任何对某事物的初始访问都会使memory address出错,然后内核将加载(demand paging中的页面输入)文件中的某些页面。阅读virtual memory&amp; memory management

你真的应该阅读像Advanced Linux Programming

这样的书

正如FGE评论的那样,问题是ASLR