由於您使用-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