
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 바이너리를 처리할 때는 --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