readelf -S a.out
saídas:
[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
O tipo de .shstrtab é STRTAB . Mas não tem sinalizadores definidos. Para /bin/true é semelhante.
Flag: SHF_STRINGS: Contains null-terminated strings
Type: SHT_STRTAB: String table
Bem, parece ser redundante. O sinalizador String já foi usado independentemente do tipo String?
Não vi o
SHF_STRINGS
atributo no documento System V Application Binary Interface, Edition 4.1 (rascunho, 18 de março de 1997) (encontrado ao procurar na entrada da Wikipedia ), mas o encontrei listado na atualização System V ABI (outubro de 2009) ; aparentemente foi adicionado no segundo rascunho (3 de maio de 1999) , mas o histórico de revisões não indica por que foi adicionado. Parece que isso foi introduzido junto com oSHF_MERGE
atributo, possivelmente para que tabelas de strings e não strings não sejam mescladas acidentalmente (?). No entanto, até onde pude descobrir, não havia referênciasSHF_STRINGS
fora das tabelas de strings (e comoSHF_MERGE
é afetado pelas entradas marcadas porSHF_STRINGS
), nem no LSB ou na documentação específica da arquitetura.Portanto, em teoria, parece que o
SHF_STRINGS
atributo pode ser usado para marcar seções que não sejam uma tabela de strings que contenha strings terminadas em nulo, mas não vi nenhuma vez em que isso aconteceu. Talvez alguém tenha feito uso da disposição, mas não consegui encontrar nenhum exemplo disso.