我们正在为我们的项目解析dwarfdump的输出,但最近意识到dwarfdump的OSX输出与Linux输出非常不同。
我们已经找到了an older python script that supposedly translates the OSX output to the Linux format,但这似乎不再有用了。
提前致谢
答案 0 :(得分:1)
主要区别在于dwarfdump
读取ELF(可执行格式)并反汇编调试信息的会话。但是,在OSX上,其可执行格式为Mach-O,因此工具名称dwarfdump
不是同一个程序,因此会产生不同的结果。
我使用的唯一类似工具是gobjdump
,其用法和结果在Linux平台上接近readelf
。使用macport来获取它
例如,我运行gcc -gdwarf-2 a.c
,获取a.out
和a.out.dSYM
然后我可以使用gobjdump --dwarf=info a.out.dSYM/Contents/Resources/DWARF/a.out
并获得如下输出:
a.out.dSYM/Contents/Resources/DWARF/a.out: file format mach-o-x86-64 Contents of the .debug_info section: Compilation Unit @ offset 0x0: Length: 0xb2 (32-bit) Version: 2 Abbrev Offset: 0x0 Pointer Size: 8 : Abbrev Number: 1 (DW_TAG_compile_unit) DW_AT_producer : (indirect string, offset: 0x1): 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2336.11.00) DW_AT_language : 1 (ANSI C) DW_AT_name : (indirect string, offset: 0x40): a.c DW_AT_entry_pc : 0x100000ef0 DW_AT_stmt_list : 0x0 DW_AT_comp_dir : (indirect string, offset: 0x44): /tmp/ : Abbrev Number: 2 (DW_TAG_base_type) DW_AT_encoding : 5 (signed) DW_AT_name : (indirect string, offset: 0x56): int DW_AT_byte_size : 4 : Abbrev Number: 3 (DW_TAG_subprogram) DW_AT_sibling : DW_AT_name : (indirect string, offset: 0x5a): main DW_AT_MIPS_linkage_name: (indirect string, offset: 0x5a): main DW_AT_decl_file : 1 DW_AT_decl_line : 3 DW_AT_prototyped : 1 DW_AT_type : DW_AT_external : 1 DW_AT_low_pc : 0x100000ef0 DW_AT_high_pc : 0x100000f45 DW_AT_frame_base : 1 byte block: 56 (DW_OP_reg6 (rbp)) : Abbrev Number: 4 (DW_TAG_formal_parameter) ...