elfdump - オブジェクトファイルの選択部分のダンプ
elfdump [-cCdegGhHiklmnPrsSuvVy] [-p | -w file] [-F fmtopt1,fmtopt2,...] [-I index-expr] [-N name] [-O osabi] [-T type] file...
elfdump ユーティリティーは、指定されたオブジェクトファイルの選択部分をシンボルでダンプします。オプションを指定することにより、オブジェクトファイルの特定部分を抽出できます。
elfdump ユーティリティーは、dump(1) ユーティリティーと機能的に似ています。elfdump のインタフェースの方が dump よりも新しく、ユーザーフレンドリです。ただし、シェルスクリプト内で使用するような場合は、dump ユーティリティーの方が適しています。
elfdump は、ar(1) で作成したアーカイブファイルの検査にも使用できます。その場合、アーカイブ内の各オブジェクトは、指定されたオプションに従って処理されます。
elfdump を使用すると、任意の ELF オブジェクトの ELF ヘッダー、プログラムヘッダーの配列、およびセクションヘッダーの配列を表示できます。また、次のタイプのセクションに含まれているデータを表示することもできます。
Category Option ELF Section Type Dynamic -d SHT_DYNAMIC Global Offset Table (GOT) -G Special, see below. Group -g SHT_GROUP Capabilities -H SHT_SUNW_cap Hash Table -h SHT_HASH Init/Fini Array SHT_INIT_ARRAY SHT_FINI_ARRAY SHT_PREINIT_ARRAY Interpreter -i Special, see below. Move -m SHT_SUNW_move Note -n SHT_NOTE Relocation -r SHT_RELA SHT_REL Stack Unwind/Exceptions -u Special, see below. Syminfo -y SHT_SUNW_syminfo Symbol Sort -S SHT_SUNW_symsort SHT_SUNW_tlssort Symbol Table -s SHT_SYMTAB SHT_DYNSYM SHT_SUNW_LDYNSYM SHT_SUNW_versym Versioning -v SHT_SUNW_verdef SHT_SUNW_verneed
一般的なマッチングオプション (–I、–N、–T) を使用すると、データを表示するセクションを選択できます。「マッチングオプション」を参照してください。さらに、elfdump には、もっとも一般的に必要とされるセクションデータのタイプを示す簡易オプションも用意されています。
インタプリタおよびグローバルオフセットテーブルのセクションには特別な ELF セクションタイプはありませんが、代わりに、よく知られた名前 (それぞれ .interp と .got) を持つ SHT_PROGBITS セクションとして実装されています。elfdump は、これらの特殊なセクションを認識して表示できます。
表示される情報を絞るためのオプションなしで実行されると、elfdump は、各オブジェクトの使用可能なすべての情報を表示します。
表示される情報の詳細は、Oracle Solaris 11.4 Linkers and Libraries Guideを参照してください。
サポートしているオプションは、次のとおりです。
セクションヘッダー情報をダンプします。
–F demangle と同等です。–F を参照してください。
.dynamic セクションの内容をダンプします。
ELF ヘッダーをダンプします。
代替出力形式オプションは、次の 1 つ以上のコンマ区切りリストとして指定します。
C++ シンボル名を復号化します。
オブジェクトの名前をすべての出力行の接頭辞として付加します。
表出力内の 16 進値を、マシンワードサイズのゼロ埋め値として表示します。デフォルトでは、elfdump はそのような値を先頭のゼロを含まない自然な形式で表示します。
省略しない長いセクション名を表示します。
セクションインデックスの表示に使用される形式を変更します。shndx 形式オプションでは、インデックスと名前を使って [index]name という形式でセクションが表示されます。shndxonly 形式オプションでは名前が省略され、セクションインデックスのみが [index] という形式で表示されます。
セクションヘッダー情報を表示する場合、デフォルトでは、sh_link または sh_info フィールドで参照されたセクションインデックスは単純な数値として表示されます。シンボルテーブルのエントリや再配置といった、その他の表示では、セクション名のみが表示されます。shndx および shndxonly 形式オプションでは、すべてのセクションインデックスが、関連する形式を使って一貫した方法で表示されます。
.group セクションの内容をダンプします。
.got セクションの内容をダンプします。
.hash セクションの内容をダンプします。
.SUNW_cap 機能セクションの内容をダンプします。
.interp セクションの内容をダンプします。
検査するセクションまたはプログラムヘッダーを、特定のインデックスまたはインデックス範囲で修飾します。たとえば、次を使用して、ファイルの 3 番目のセクションヘッダーを表示できます。
example% elfdump -c -I 3 filename
index-expr には、上記の例に示したように、特定の項目を指定する負でない単一の整数値を指定できます。または、index-expr は、項目の範囲を示すコロン (:) で区切られた 2 つの負でない単一の整数値で構成することもできます。次の例は、ファイル内の 3 番目、4 番目、および 5 番目のプログラムヘッダーを表示します。
example% elfdump -p -I 3:5 filename
インデックスの範囲を指定する場合、2 番目の値を省略すると、ファイル内の最後の項目を意味することができます。たとえば、次の文は 10 番目から最後までのすべてのセクションヘッダーを一覧表示します。
example% elfdump -c -I 10: filename
マッチングオプション (–I、–N、–T) の詳細は、「マッチングオプション」を参照してください。
ELF チェックサムを計算します。gelf_checksum(3ELF) のマニュアルページを参照してください。
–F notrunc と同等です。–F を参照してください。
D.SUNW_move セクションの内容をダンプします。
.note セクションの内容をダンプします。デフォルトでは、elfdump は、このデータを解釈せずに 16 進形式で表示します。コアファイルは例外です。core(5) で説明されているコアファイルの note のサブセットは、elfdump によって解釈され、高いレベルの形式 NT_PLATFORM、NT_AUXV、NT_ASRS、NT_PSTATUS、NT_PSINFO、NT_PRCRED、NT_UTSNAME、NT_LWPSTATUS、NT_LWPSINFO、NT_PRPRIV、NT_PRPRIVINFO、NT_CONTENT、NT_ZONENAME、NT_SIGACTION、および NT_FDINFO で表示されます。
検査するセクションまたはプログラムヘッダーを、特定の名前で修飾します。たとえば、複数のシンボルテーブルが入っているファイルにおいて .dynsym シンボルテーブルだけを表示するには、次を使用します。
example% elfdump -N .dynsym filename
ELF プログラムヘッダーには名前がありません。–p オプションを指定した場合、name は、プログラムヘッダータイプを指し、–N オプションの動作は –T オプションの動作と同じになります。たとえば、次を使用して、インタプリタを識別するプログラムヘッダーを表示できます。
example% elfdump -p -N PT_INTERP filename
マッチングオプション (–I、–N、–T) の詳細は、「マッチングオプション」を参照してください。
オブジェクトを解釈するときに適用するオペレーティングシステムの ABI を指定します。osabi には、/usr/include/sys/elf.h に含まれているいずれかの ELFOSABI_ 定数の名前または値を指定できます。利便性のため、ELFOSABI_ 接頭辞をこれらの名前から省略できます。osabi では、2 つの値が完全にサポートされています。solaris は、Solaris オペレーティングシステムのネイティブ ABI です。none は、汎用の ELF ABI です。ほかのオペレーティングシステムの ABI のサポートは、不完全であるか、存在しない可能性があります。文字列を取得できない項目は、数値形式で表示されます。
–O を使用せず、オブジェクトの ELF ヘッダーで汎用以外の ABI が指定されている場合、オブジェクトによって指定されている ABI が使用されます。オブジェクトで汎用の ELF ABI が指定されている場合、elfdump は、.note.ABI-tag セクションを検索し、見つかった場合は、linux ABI を持つオブジェクトとしてそのオブジェクトを識別します。それ以外の場合、汎用の ELF ABI を指定しているオブジェクトは、solaris ABI に準拠すると想定されます。
プログラムヘッダーをダンプします。マッチングオプション (–I、–N、– T) を使用すると、個々のプログラムヘッダーを指定できます。詳細は、「マッチングオプション」を参照してください。
–p オプションと –w オプションを同時に指定することはできません。1 回の elfdump 呼び出しでは、どちらかのオプションしか使用できません。
プログラムヘッダーからの情報に基づいて代替のセクションヘッダー情報を生成および使用し、ファイルに含まれているセクションヘッダー情報を無視します。ファイルにセクションヘッダーがない場合、警告メッセージが出力され、このオプションが自動的に選択されます。セクションヘッダーは、プログラムを実行するためにシステムで使用されることはありません。そのため、悪意のあるプログラムでは、そのセクションヘッダーが削除されていたり、偽の情報を提供するように変更されていたりする場合があります。対照的に、プログラムが実行可能であるためには、プログラムヘッダーは正確である必要があります。プログラムヘッダーから生成された合成のセクションヘッダーを使用すると、変更されたセクションヘッダーを持つファイルを調べることができます。
再配置セクション (つまり、.rel[a]) の内容をダンプします。
シンボルテーブルセクション .SUNW_ldynsym、.dynsym、および .symtab の内容をダンプします。アーカイブの場合は、アーカイブシンボルテーブルもダンプします。マッチングオプション (–I、–N、–T) を使用すると、個々のセクションを指定できます。アーカイブシンボルテーブルは特殊なセクション名 –N ARSYM で指定できます。
コアファイルの場合、shndx フィールドには有効な値が入っていないため、shndx フィールドの値は「unknown」になります。
ver ヘッダーの下に、標準のシンボルテーブル情報に加えて、シンボルのバージョン定義索引も出力します。
マッチングオプション (–I、–N、–T) の詳細は、「マッチングオプション」を参照してください。
シンボルソートセクション .SUNW_dynsymsort および .SUNW_dyntlssort で指定された順序でソートされたシンボルテーブルセクション .SUNW_ldynsym および .dynsym の内容をダンプします。スレッドローカル記憶領域 (TLS) シンボルは、オフセットでソートされます。通常のシンボルはアドレスでソートされます。ソートセクションによって参照されていないシンボルは表示されません。
検査するセクションまたはプログラムヘッダーを、特定のタイプで修飾します。たとえば、複数のシンボルテーブルが入っているファイルにおいて .dynsym シンボルテーブルだけを表示するには、次を使用します。
example% elfdump -T SHT_DYNSYM filename
type の値には、数値、または /usr/include/sys/elf.h で定義されているいずれかの SHT_ シンボリック名を指定できます。SHT_ 接頭辞はオプションであり、type では大文字と小文字は区別されません。そのため、上記の例は次のように記述することもできます。
example% elfdump -T dynsym filename
–p オプションを指定した場合、type はプログラムヘッダータイプを指すため、特定のプログラムヘッダーを表示できます。たとえば、次を使用して、インタプリタを識別するプログラムヘッダーを表示できます。
example% elfdump -p -T PT_INTERP filename
type の値には、数値、または /usr/include/sys/elf.h で定義されているいずれかの PT_ シンボリック名を指定できます。PT_ 接頭辞はオプションであり、type では大文字と小文字は区別されません。そのため、上記の例は次のように記述することもできます。
example% elfdump -p -T interp filename
マッチングオプション (–I、–N、–T) の詳細は、「マッチングオプション」を参照してください。
スタックフレーム巻き戻しおよび例外処理に使用されるセクションの内容をダンプします。
バージョンセクション .SUNW_version の内容をダンプします。
バージョン情報を出力してすぐに終了します。
マッチングオプション (–I、–N、–T) を使用して指定されたセクションの内容を、指定されたファイルに書き込みます。たとえば、ファイル内の .text セクションを抽出するには、次のように指定します。
example% elfdump -w text.out -N .text filename
マッチングオプション (–I、–N、–T) の詳細は、「マッチングオプション」を参照してください。
–p オプションと –w オプションを同時に指定することはできません。1 回の elfdump 呼び出しでは、どちらかのオプションしか使用できません。
.SUNW_syminfo セクションの内容をダンプします。シンボルの属性は、次のキーワードによって伝達されます。
シンボル定義は、補助フィルタとして機能します。
シンボルは、機能と関連付けられています。
シンボル定義はコピー再配置の結果です。
シンボルは、遅延依存関係に関連付けられています。
シンボル参照には、関連付けられたオブジェクトに対する依存関係があります。
シンボル参照は、関連付けられた依存関係に直接結合されています。常に DEPEND とともに設定されます。
シンボル定義は、標準フィルタとして機能します。
シンボル定義は割り込み処理として機能します。
レイジー読み込みの必要がある依存関係に対するシンボル参照です。常に DEPEND とともに設定されます。
外部参照をこのシンボル定義に直接結合することはできません。
シンボル定義は、弱い標準フィルタとして機能します。常に FILTER とともに設定されます。
使用法に関するメッセージを出力したあと、すぐに終了します。
次のオペランドを指定できます。
指定されたオブジェクトファイルの名前
オプション –I、–N、および –T は、まとめてマッチングオプションと呼ばれます。これらのオプションは、インデックス、名前、またはタイプによって、検査するプログラムヘッダーまたはセクションの範囲を絞り込むために使用されます。
マッチングオプションの厳密な解釈は、使用されているほかのオプションによって異なります。
–p オプションとともに使用した場合、マッチングオプションはプログラムヘッダーを参照します。–I は、プログラムヘッダーのインデックスを指します。–T は、プログラムヘッダーのタイプを指します。プログラムヘッダーには名前がないため、–N オプションは、プログラムヘッダーに対しては –T と同様に動作します。
マッチングオプションは、オプション –c、–g、–m、–n、–r、–s、–S、–u、–w のいずれかとともに使用された場合、セクションをインデックス、名前、またはタイプで選択するために使用されます。
オプション –c、–g、–m、–n、–p, –r、–s、–S、–u、–w のいずれも指定されず、マッチングオプションが単独で使用された場合、elfdump は各オブジェクトを検査し、一致したいずれかのセクションの内容を表示します。
任意の数およびタイプのマッチングオプションを組み合わせて、対象となる elfdump の呼び出しで使用できます。この場合、elfdump は使用されたすべてのマッチングオプションと一致する、すべての項目の上位集合を表示します。この機能を使用すると、各項目の指定にもっとも簡単な形式を使用し、複雑な項目のグループを選択できます。
リンカーデバッグ用ライブラリ
プロセス制御ライブラリ
属性についての詳細は、マニュアルページの attributes(7) を参照してください。
|
ar(1)、dump(1)、elffile(1)、file(1)、nm(1)、pvs(1)、elf(3ELF)、libproc(3LIB)、core(5)、attributes(7)
OracleSolaris 11.4 リンカーとライブラリガイド
スタック巻き戻しおよび例外処理に使用されるセクションは、使用されているコンパイラとプラットフォームによって、ELF セクションタイプが SHT_PROGBITS または SHT_AMD64_UNWIND になります。これらのセクションは、.eh_frame、.eh_frame_hdr 、および .exception_ranges の名前で認識されます。
コアファイルには、それぞれプログラムヘッダーによって表される複数のオブジェクトからの情報が含まれています。elfdump は libproc を使用して、各プログラムヘッダーに対応するオブジェクト名とマッピング属性を特定します。プログラムヘッダーはこの情報を表示するために pr_mapname および pr_mflags フィールドで拡張されます。セクション名はそれらが適用されるオブジェクトの名前で拡張されます。