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の種類は次のとおりです。ストラタップ。しかし、フラグを設定しません。 /bin/trueに似ています。
Flag: SHF_STRINGS: Contains null-terminated strings
Type: SHT_STRTAB: String table
まあ、それは重複しているようです。 StringフラグはString型とは無関係に使用されますか?
答え1
SHF_STRINGS
その属性は表示されません。System Vアプリケーションバイナリインタフェース、バージョン4.1(草案、1997年3月18日)文書(裏返し発見)ウィキペディアアイテム)、以下にリストされているものが見つかりました。System V ABIアップデート(2009年10月);明らかに追加された内容です2番目の草案(1999年5月3日)ただし、改訂履歴には追加の理由は記載されていません。これはSHF_MERGE
、文字列テーブルと非文字列テーブルが誤ってマージ(?)されないように属性とともに導入されたようです。しかし、私が知っている限り、SHF_STRINGS
文字列テーブルの外部への参照(およびSHF_MERGE
タグ付き項目の影響を受ける方法SHF_STRINGS
)やLSBまたはアーキテクチャ固有の文書には参照はありません。
したがって、理論的には、このプロパティを使用してnullで終わる文字列を含む文字列テーブル以外の部分を表示できるように見えますが、SHF_STRINGS
この現象はいつでも発生しません。誰かがこの条項を使用している可能性がありますが、そのような例は見つかりません。