dwarf2json 是一个 Go 工具,用于处理包含符号和类型信息的文件,以生成适用于 Linux 和 macOS 分析的 Volatility3 中间符号文件 (ISF) JSON 输出。
构建(需 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 内存。
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 二进制文件时,需要使用 --arch 标志为其中一个嵌入的 Mach-O 文件选择架构。
例如,为 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