Dwarfdump在OSX和Linux之间的差异(以及如何避免它们)

3

你应该直接处理DWARF(例如使用libdwarf)而不是解析程序的文本输出。我已经将一些代码从后者转换为前者,效果更好/更健壮。 - ysdx
对我来说,这个方法可行:dwarfdump --all ./executable.dwarf。顺便提一下。 - rogerdpack
1个回答

2
主要区别在于读取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) ...

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接