Скомпилированный с флагом -g
, вы можете использовать любую утилиту для чтения DWARF для просмотра информации об устройствах компиляции. Например, вы можете использовать: выход
`dwarfdump -r main`
Пример:
.debug_aranges
COMPILE_UNIT<header overall offset = 0x00000000>:
< 0><0x0000000b> DW_TAG_compile_unit
DW_AT_producer "GNU C++ 4.9.2 -mtune=generic -march=x86-64 -g -std=c++11"
DW_AT_language DW_LANG_C_plus_plus
DW_AT_name "main.cc"
DW_AT_comp_dir "/home/yam/tmp/bla"
DW_AT_low_pc 0x004006b6
DW_AT_high_pc <offset-from-lowpc>93
DW_AT_stmt_list 0x00000000
arange starts at 0x004006b6, length of 0x0000005d, cu_die_offset = 0x0000000b
arange end
COMPILE_UNIT<header overall offset = 0x00002a66>:
< 0><0x0000000b> DW_TAG_compile_unit
DW_AT_producer "GNU C++ 4.9.2 -mtune=generic -march=x86-64 -g -std=c++11"
DW_AT_language DW_LANG_C_plus_plus
DW_AT_name "test.cc"
DW_AT_comp_dir "/home/yam/tmp/bla"
DW_AT_low_pc 0x00400713
DW_AT_high_pc <offset-from-lowpc>11
DW_AT_stmt_list 0x00000365
Вы также можете сделать несколько простых синтаксический:
dwarfdump -r main | \
grep 'AT_name\|AT_comp_dir' | \
tac | sed -r 's/.*"(.*)"/\1/' | \
ruby -e 'STDIN.readlines.map(&:strip).each_slice(2) { |s| puts File.join(*s) }'
Какие выходы
/home/yam/tmp/bla/test.cc
/home/yam/tmp/bla/main.cc
Так как ваш установочные компиляции X.cpp
- X.o
, вы также можете просто заменить расширения и получить имена файлов объектов.
Вы хотите декомпилировать исполняемый файл? – NathanOliver
no @NathanOliver Мое намерение - это просто узнать об объектных файлах, которые отвечают за исполняемый файл. – Bam