ELF段中未映射的区域

时间:2015-08-06 10:27:49

标签: elf

以下是我的readelf -l测试的输出

Program Headers:                   
Type           Offset   VirtAddr   PhysAddr   FileSiz MemSiz  Flg Align
LOAD           0x000000 0x00008000 0x00008000 0x00148 0x00148 R E 0x8000
LOAD           0x000148 0x00010148 0x00010148 0x00000 0x00004 RW  0x8000
NOTE           0x0000b4 0x000080b4 0x000080b4 0x00024 0x00024 R   0x4
GNU_STACK      0x000000 0x00000000 0x00000000 0x00000 0x00000 RW  0x4
Section to Segment mapping:
Segment Sections...
00     .note.gnu.build-id .text 
01     .bss 
02     .note.gnu.build-id 
03  

我的问题是关于第一个LOAD部分。它包含[8000 - 8148],并映射到.note和.text部分。我的readelf -S输出显示.note部分从80b4开始,.text从80d8开始。这意味着可加载段包含一个区域[8000-80b3],该区域未映射到任何部分,但仍将由加载程序加载到内存中。

我的问题是,如果我创建一个范围从[80b4-8148]删除此细分的新细分有什么危害吗?

1 个答案:

答案 0 :(得分:1)

  

这意味着可加载段包含一个区域[8000-80b3],该区域未映射到任何部分,但仍将由加载程序加载到内存中。

正确。您会在该细分中找到Elf32_Ehdr,可能还有一组Elf32_Phdr

注意:对于主二进制文件,它实际上是执行加载的内核,而不是动态链接器。在调用它" loader"时你没有错,但通常人们使用" loader"对于动态链接器,而不是映射在主二进制文件中的内核部分"。

  

我的问题是,如果我创建一个范围从[80b4-8148]删除此细分的新细分有什么危害吗?

细分必须是页面对齐的。 .p_vaddr未与页面对齐的段(我相信您提议)将被内核拒绝。