Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Binary ELF对象中的多个字符串表_Binary_Elf - Fatal编程技术网

Binary ELF对象中的多个字符串表

Binary ELF对象中的多个字符串表,binary,elf,Binary,Elf,从ELF文档: SHT_STRTAB 该部分包含一个字符串表。一个对象文件可能有多个字符串表节。有关详细信息,请参阅下面的“字符串表” (注意:我没有注意到关于“字符串表”段落中多个字符串表部分的任何信息) 多个字符串表节是否意味着节头的字符串表和对象文件本身的字符串表 如果对象本身有多个字符串表(.strtab),文档中没有提到如何读取字符串 欢迎对该主题进行任何澄清。手册页仅对ELF文件格式(某些部分)进行了概述/总结,您可能需要查看 解释 链接视图 ELF文件具有多个字符串表。通常有3-4

从ELF文档:

SHT_STRTAB 该部分包含一个字符串表。一个对象文件可能有多个字符串表节。有关详细信息,请参阅下面的“字符串表”

(注意:我没有注意到关于“字符串表”段落中多个字符串表部分的任何信息)

多个字符串表节是否意味着节头的字符串表和对象文件本身的字符串表

如果对象本身有多个字符串表(
.strtab
),文档中没有提到如何读取字符串


欢迎对该主题进行任何澄清。

手册页仅对ELF文件格式(某些部分)进行了概述/总结,您可能需要查看

解释 链接视图 ELF文件具有多个字符串表。通常有3-4个字符串表:

  • 一个字符串表(通常称为.shstrtab)用于节名。所有节名称(在节标题表中)都取自单个字符串表。该字符串表由其在节头表中的索引标识:节名字符串表的索引在ELF头(e_shstrndx)中指示

  • 另一个字符串表(通常称为.strtab)用于完整符号表(.symtab)。.dynamic部分使用相同的字符串表

  • 另一个字符串表(通常称为.dynstr)用于最小符号表(.dynsym)

  • 另一个字符串表用于

对于给定的符号表节,用作字符串表的节在节头表的sh_链接字段中指示(参见本手册的图4-12)

执行视图 对于执行视图(程序头表),用于符号表(DT_SYMTAB)的字符串表的地址在动态部分的DT_STRTAB条目中给出

例子 链接视图 这是一个hello world程序(显示为
readelf-a

.shtrtab ELF标头:

ELF Header: Magic: 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00 Class: ELF64 Data: 2's complement, little endian Version: 1 (current) OS/ABI: UNIX - System V ABI Version: 0 Type: EXEC (Executable file) Machine: Advanced Micro Devices X86-64 Version: 0x1 Entry point address: 0x4003c0 Start of program headers: 64 (bytes into file) Start of section headers: 4624 (bytes into file) Flags: 0x0 Size of this header: 64 (bytes) Size of program headers: 56 (bytes) Number of program headers: 8 Size of section headers: 64 (bytes) Number of section headers: 30 Section header string table index: 27 ELF标头: 魔术:7f 45 4c 46 02 01 00 00 类别:ELF64 数据:2的补码,小尾端 版本:1(当前版本) OS/ABI:UNIX-SystemV ABI版本:0 类型:EXEC(可执行文件) 机器:高级微设备X86-64 版本:0x1 入口点地址:0x4003c0 程序头的开始:64(文件中的字节) 节头的开头:4624(文件中的字节) 标志:0x0 此标头的大小:64(字节) 程序头的大小:56(字节) 程序头数:8 节标题的大小:64(字节) 节头数:30 节头字符串表索引:27 告诉我们节名在第27节中。这很方便。shtrtab:

Section Headers: [Nr] Name Type Address Offset Size EntSize Flags Link Info Align [...] [27] .shstrtab STRTAB 0000000000000000 000008e0 0000000000000108 0000000000000000 0 0 1 章节标题: [Nr]名称类型地址偏移量 大小EntSize标志链接信息对齐 [...] [27].shstrtab STRTAB 00000000000000000000000 8e0 0000000000000108 0000000000000000 0 0 1 戴恩斯特先生 对于.dynsym,我们有:

[ 5] .dynsym DYNSYM 0000000000400280 00000280 0000000000000048 0000000000000018 A 6 1 8 ^ HERE [5].dynsym dynsym 0000000000 400280 00000280 00000000000000 48 00000000000000 18 A 6 1 8 ^ 在这里 其名称取自第6节,即.dynstr:

[ 6] .dynstr STRTAB 00000000004002c8 000002c8 0000000000000038 0000000000000000 A 0 0 1 [6]。dynstr标准数据库0000000000 4002C8 000002c8 00000000000000 38 0000000000000000 A 0 0 1 其他部分也使用此字符串表:

[ 8] .gnu.version_r VERNEED 0000000000400308 00000308 0000000000000020 0000000000000000 A 6 1 8 [21] .dynamic DYNAMIC 0000000000600698 00000698 00000000000001d0 0000000000000010 WA 6 0 8 [8].gnu.version\u r VERNEED 0000000000 400308 00000308 00000000000000 20 0000000000000000 A 6 1 8 [21].动态0000000000 600698 00000698 0000000000000 1D000000000000010 WA 6 0 8 .strtab 对于.symtab:

[28] .symtab SYMTAB 0000000000000000 000009e8 0000000000000600 0000000000000018 29 45 8 ^ HERE [28]。symtab symtab 00000000000000000 9E8 0000000000000600 0000000000000018 29 45 8 ^ 在这里 名称取自第29节,该节恰好是.strab:

[29] .strtab STRTAB 0000000000000000 00000fe8 0000000000000224 0000000000000000 0 0 1 [29].strtab strtab 00000000000000000 FE8 0000000000000224 0000000000000000 0 0 1 执行视图 偏移量0x698处的动态部分包含24个条目: 标记类型名称/值 0x0000000000000001(需要)共享库:[libc.so.6] 0x000000000000000c(初始化)0x400370 0x000000000000000d(FINI)0x400544 0x0000000000000019(初始数组)0x600680 0x000000000000001b(初始数组)8(字节) 0x000000000000001a(FINI_数组)0x600688 0x000000000000001c(FINI_ARRAYSZ)8(字节) 0x000000006FFFFFFF5(GNU哈希)0x400260 0x0000000000000005(STRTAB)0x4002c8 Dynamic section at offset 0x698 contains 24 entries: Tag Type Name/Value 0x0000000000000001 (NEEDED) Shared library: [libc.so.6] 0x000000000000000c (INIT) 0x400370 0x000000000000000d (FINI) 0x400544 0x0000000000000019 (INIT_ARRAY) 0x600680 0x000000000000001b (INIT_ARRAYSZ) 8 (bytes) 0x000000000000001a (FINI_ARRAY) 0x600688 0x000000000000001c (FINI_ARRAYSZ) 8 (bytes) 0x000000006ffffef5 (GNU_HASH) 0x400260 0x0000000000000005 (STRTAB) 0x4002c8 <= HERE 0x0000000000000006 (SYMTAB) 0x400280 0x000000000000000a (STRSZ) 56 (bytes) 0x000000000000000b (SYMENT) 24 (bytes) 0x0000000000000015 (DEBUG) 0x0 0x0000000000000003 (PLTGOT) 0x600870 0x0000000000000002 (PLTRELSZ) 48 (bytes) 0x0000000000000014 (PLTREL) RELA 0x0000000000000017 (JMPREL) 0x400340 0x0000000000000007 (RELA) 0x400328 0x0000000000000008 (RELASZ) 24 (bytes) 0x0000000000000009 (RELAENT) 24 (bytes) 0x000000006ffffffe (VERNEED) 0x400308 0x000000006fffffff (VERNEEDNUM) 1 0x000000006ffffff0 (VERSYM) 0x400300 0x0000000000000000 (NULL) 0x0