以下是我的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]删除此细分的新细分有什么危害吗?
答案 0 :(得分:1)
这意味着可加载段包含一个区域[8000-80b3],该区域未映射到任何部分,但仍将由加载程序加载到内存中。
正确。您会在该细分中找到Elf32_Ehdr
,可能还有一组Elf32_Phdr
。
注意:对于主二进制文件,它实际上是执行加载的内核,而不是动态链接器。在调用它" loader"时你没有错,但通常人们使用" loader"对于动态链接器,而不是映射在主二进制文件中的内核部分"。
我的问题是,如果我创建一个范围从[80b4-8148]删除此细分的新细分有什么危害吗?
细分必须是页面对齐的。 .p_vaddr
未与页面对齐的段(我相信您提议)将被内核拒绝。