gpt4 book ai didi

assembly - 为什么 elf 文件中的段可以重叠

转载 作者:行者123 更新时间:2023-12-03 16:18:09 27 4
gpt4 key购买 nike

简单的C文件:

#include <stdio.h>
int main(){
printf("Hello World");
return 0;
}

编译代码后,使用 readelf -a a.out , Sprite 信息如下:

elf program headers, segment info

问题:
  • 几个部分出现在不同的段中,例如第二段和第三段中的 interp 部分。一个部分如何出现在多个部分中?
  • 第二段的地址从 0x8048134 开始,但第三个 LOAD 段从 0x8048000 开始,0x004d0 memsize。那么这两段重叠?两个段如何在内存中重叠?
  • 为什么程序头的偏移量和 viraddr 必须与页面大小模数一致?
  • 最佳答案

    节表中可能有垃圾,或者可能完全丢失。对于动态加载器来说,所有重要的是段表(程序头),即使如此,只有 PT_LOAD 段不应该重叠*。其他类型的段(INTERP、DYNAMIC 等)为加载程序提供附加信息,通常引用 LOAD 段的某些部分。

    *这是什么the spec说:

    PT_LOAD The array element specifies a loadable segment, described by p_filesz and p_memsz. The bytes from the file are mapped to the beginning of the memory segment. If the segment's memory size (p_memsz) is larger than the file size (p_filesz), the "extra" bytes are defined to hold the value 0 and to follow the segment's initialized area. The file size may not be larger than the memory size. Loadable segment entries in the program header table appear in ascending order, sorted on the p_vaddr member.



    正如你所看到的,没有提到重叠,所以它似乎没有被禁止,尽管我认为我没有看到任何具有重叠 PT_LOAD 段的文件。

    关于assembly - 为什么 elf 文件中的段可以重叠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10871706/

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