我们正在解析dwarfdump的输出以完成项目,但最近发现OSX版本的dwarfdump输出与Linux版本非常不同。 这两者为什么不同? 是否可能使OSX版本的dwarfdump输出与Linux版本相同格式? 我们已经找到一个较旧的Python脚本,据说可以将OSX版本转换为Linux格式,但似乎不再起作用。提前感谢。
主要区别在于读取ELF(可执行格式)并反汇编调试信息会话。然而,在OSX上,其可执行格式是Mach-O,因此工具名称不是同一个程序,因此它产生了不同的结果。我使用过的唯一类似工具是,其用法和结果与Linux平台上的接近。 使用macports获取它安装macports。 port install binutils gobjdump --dwarf=info path例如,我运行,得到和 然后我可以使用并获得以下输出:a.out.dSYM/Contents/Resources/DWARF/a.out: 文件格式为mach-o-x86-64.debug_info部分的内容:编译单元偏移量为0x0: 长度:0xb2(32位) 版本:2 缩写偏移量:0x0 指针大小:8 : 缩写号码:1(DW_TAG_compile_unit) DW_AT_producer : (间接字符串,偏移量:0x1):4.2.1(基于Apple Inc. build 5658)(LLVM build 2336.11.00) DW_AT_language : 1 (ANSI C) DW_AT_name : (间接字符串,偏移量:0x40):a.c DW_AT_entry_pc : 0x100000ef0 DW_AT_stmt_list : 0x0 DW_AT_comp_dir : (间接字符串,偏移量:0x44):/tmp/ : 缩写号码:2(DW_TAG_base_type) DW_AT_encoding : 5 (有符号的) DW_AT_name : (间接字符串,偏移量:0x56):int DW_AT_byte_size : 4 : 缩写号码:3(DW_TAG_subprogram) DW_AT_sibling : DW_AT_name : (间接字符串,偏移量:0x5a):main DW_AT_MIPS_linkage_name: (间接字符串,偏移量: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字节块:56 (DW_OP_reg6(rbp)) : 缩写号码:4(DW_TAG_formal_parameter) ...
dwarfdump --all ./executable.dwarf
。顺便提一下。 - rogerdpack