Elf

.shstrtab 節沒有包含空終止字元串的標誌

  • February 7, 2018

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屬性似乎可用於標記除包含以空字元結尾的字元串的字元串表以外的部分,但我沒有看到任何時候發生這種情況。也許有人利用了這條規定,但我找不到任何例子。

引用自:https://unix.stackexchange.com/questions/422415