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

linux – 如何将elf中的地址转换为物理地址,第1张

概述我知道 *** 作系统会将精灵加载到物理内存中.执行jmp elf-address时,系统会检查tlb并将elf-address转换为物理地址.我很困惑,elf-address没有段num和页面num? os如何将elf-address转换为MMU需要的内容. 我真的很困惑. 我知道linux会读取精灵和地图精灵的标题. 当页面错误发生时,内核会将elf加载到内存中并刷新页面表. 但你知道精灵地址就像是0 我知道 *** 作系统会将精灵加载到物理内存中.执行jmp elf-address时,系统会检查tlb并将elf-address转换为物理地址.我很困惑,elf-address没有段num和页面num? os如何将elf-address转换为MMU需要的内容.

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

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

解决方法 我真的不认为 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& memory management.

你真的应该读像Advanced Linux Programming这样的书

正如FGE评论的那样,存在ASLR的问题.

总结

以上是内存溢出为你收集整理的linux – 如何将elf中的地址转换为物理地址全部内容,希望文章能够帮你解决linux – 如何将elf中的地址转换为物理地址所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/1019615.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存