gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 00:41:34 26 4
gpt4 key购买 nike

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

我真的很困惑。我知道 linux 会读取 elf 的 header 和 map elf。当页面错误发生时,内核会在内存中加载elf并刷新页表。但是你知道 elf 地址就像 0x0804900。如果我们想执行jmp elf-address ,内核如何将 elf-address 映射到 MMU 可以使用的地址。你知道 MMU 地址是基于段号和页号的。

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

最佳答案

我真的不认为 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中的地址转换为物理地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14234448/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com