Elf
.shstrtab 節沒有包含空終止字元串的標誌
readelf -S a.out
輸出:[Nr] Name Type Addr Off Size ES Flg Lk Inf Ar [ 0] NULL 00000000 000000 000000 00 0 0 0 [ 1] .text PROGBITS 08048060 000060 000013 00 AX 0 0 16 [ 2] .rodata PROGBITS 08048074 000074 00000b 00 A 0 0 4 [ 3] .shstrtab STRTAB 00000000 00007f 000019 00 0 0 1
.shstrtab 的類型是STRTAB。但它沒有設置標誌。對於 /bin/true 它是相似的。
Flag: SHF_STRINGS: Contains null-terminated strings
Type: SHT_STRTAB: String table
好吧,這似乎是多餘的。String 標誌是否曾經獨立於 String 類型使用?
我沒有在System V Application Binary Interface, Edition 4.1(草稿,1997 年 3 月 18 日)文件中看到該
SHF_STRINGS
屬性(在查看Wikipedia 條目時找到),但確實在System V ABI Update(2009 年 10 月)中找到了它;它顯然是在第二稿(1999 年 5 月 3 日)中添加的,但修訂歷史並未說明添加的原因。似乎這是與屬性一起引入的,可能是為了避免字元串表和非字元串表意外合併(?)。但是,據我所知,沒有對字元串表之外的引用(以及如何受標記的條目影響)SHF_MERGE``SHF_STRINGS``SHF_MERGE``SHF_STRINGS
),也不在 LSB 或特定於體系結構的文件中。因此,從理論上講,該
SHF_STRINGS
屬性似乎可用於標記除包含以空字元結尾的字元串的字元串表以外的部分,但我沒有看到任何時候發生這種情況。也許有人利用了這條規定,但我找不到任何例子。