
ELF/DWARF のシンボルおよび型情報を vol3 の中間 JSON に変換する
dwarf2json は、シンボル情報と型情報を含むファイルを処理し、Linux および macOS 分析に適した Volatility3 中間シンボルファイル(ISF)JSON 出力を生成する Go ユーティリティです。
ビルドするには(Go 1.18 以上が必要です):
$ go build
実行するには:
$ ./dwarf2json --help
Usage: ./dwarf2json COMMAND
A tool for generating intermediate symbol file (ISF)
Commands:
linux generate ISF for Linux analysis
mac generate ISF for macOS analysis
Options:
-h, --help Show this screen.
-v, --version Show tool and output schema version.
注: 大きな DWARF ファイルの処理には、最低 8GB の RAM が必要です。
dwarf2json は、ELF ファイルからの DWARF およびシンボルテーブル情報と、System.map 入力ファイルからのシンボルを処理して、Linux分析用の ISF を生成することをサポートしています。
ユーザーは、各入力ファイルについて、シンボル、型、またはその両方を含めるかどうかを選択できます。
$ ./dwarf2json linux --help
Usage: dwarf2json linux [OPTIONS]
--elf PATH ELF file PATH to extract symbol and type information
--elf-symbols PATH ELF file PATH to extract only symbol information
--elf-types PATH ELF file PATH to extract only type information
--system-map PATH System.Map file PATH to extract symbol information
例えば、特定の Linux カーネル DWARF ファイルのシンボルと型を含めるには、次のようにします:
$ ./dwarf2json linux --elf /usr/lib/debug/boot/vmlinux-4.4.0-137-generic > output.json
シンボルテーブル情報から抽出されたシンボルのオフセットは、DWARF 情報から抽出されたものよりも優先されます。したがって、--elf-symbols フラグで指定されたファイルから抽出されたシンボルは、--elf で指定されたファイルから抽出されたシンボルよりも優先されます。--system-map フラグで指定された System.Map からのシンボルのオフセットが最も優先されます。異なるシンボル情報ソース間で競合がある場合、System.Map のオフセットが使用されます。
特定のフラグに対して複数の入力ファイルを指定できます。例えば、./dwarf2json --elf file1 --elf file2 ... は file1 と file2 の両方を処理します。競合するシンボルまたは型情報が検出された場合、コマンド呼び出しで最後に指定されたファイルのデータが優先されます。
dwarf2json は、Mach-O ファイルからの DWARF およびシンボルテーブル情報を処理して、macOS分析用の ISF を生成することをサポートしています。
ユーザーは、各入力ファイルについて、シンボル、型、またはその両方を含めるかどうかを選択できます。
$ ./dwarf2json mac --help
Usage: dwarf2json mac [OPTIONS]
--arch NAME architecture for universal FAT files. NAME is one of {i386|x86_64}
--macho PATH Mach-O file PATH to extract symbol and type information
--macho-symbols PATH Mach-O file PATH to extract only symbol information
--macho-types PATH Mach-O file PATH to extract only type information
例えば、特定の macOS カーネル DWARF ファイルのシンボルと型、および macOS カーネルからのシンボルを含めるには、次のようにします:
$ ./dwarf2json mac --macho /path/kernel.dSYM/Contents/Resources/DWARF/kernel \
--macho-symbols /path/kernel > output.json
シンボルテーブル情報から抽出されたシンボルのオフセットは、DWARF 情報から抽出されたものよりも優先されます。したがって、--macho-symbols フラグで指定されたファイルから抽出されたシンボルは、--macho で指定されたファイルから抽出されたシンボルよりも優先されます。
特定のフラグに対して複数の入力ファイルを指定できます。例えば、./dwarf2json --macho file1 --macho file2 ... は file1 と file2 の両方を処理します。競合するシンボルまたは型情報が検出された場合、コマンド呼び出しで最後に指定されたファイルのデータが優先されます。
Mach-O ユニバーサル FAT バイナリを処理する場合、埋め込まれている Mach-O ファイルのいずれかのアーキテクチャを選択するために --arch フラグを使用する必要があります。
例えば、OS X 10.7 カーネルデバッグキットの i386 アーキテクチャ用の ISF JSON ファイルを生成するには、次のようにします:
$ ./dwarf2json mac --arch i386 \
--macho mach_kernel.dSYM/Contents/Resources/DWARF/mach_kernel \
--macho-symbols mach_kernel > mach_kernel.json