将源与反汇编代码匹配

时间:2014-04-19 19:04:45

标签: c++ linux debugging assembly g++

作为我的JOB的一部分,我经常需要分析带有/不带核心转储的不可重现的零售崩溃。我一般都配备

  1. 调用堆栈,崩溃时的注册表信息,信息
  2. 实际负载模块
  3. 匹配源代码
  4. 通常,根据偏移并通过objdump生成拆卸,我计算失败的指令(机器代码/汇编代码)。

    下一个工作很繁琐。我尝试将失败的指令映射到实际的源位置。这是耗时且痛苦的。是否有一种无痛,简便的方法将源代码映射到失败的指令?

    我尝试使用gcc -S选项使用汇编源,但无法有效映射源。我通常找不到一种逻辑方法来将汇编输出映射到带源的崩溃偏移量。

    请建议推荐的方法。

2 个答案:

答案 0 :(得分:4)

创建零售代码并启用调试信息,然后在发货前将其剥离,但请保留好。然后,您可以使用副本分析核心转储。

答案 1 :(得分:0)

这里的关键是拥有一个精确的版本系统(包括用于存储源代码的版本控制软件),以便您可以拥有一对确定的二进制和源代码匹配对。这应该包括什么版本的编译器,以及用于构建最终二进制文件的所有编译器选项和所有头和库代码。

现在,如果你有这个,你可以重新创建一个与客户运行的相同的构建,但是使用调试信息,并在gdb中使用它来调试代码。