关于如何编写调试格式转换工具的建议

时间:2010-08-26 05:46:11

标签: debugging dwarf

我正在寻找一种工具,旨在将一种格式的调试符号转换为另一种格式,以便在GDB下使用。这似乎是一个单调乏味且可能很复杂的项目,所以我不确定如何解决它。

最初我的目标是将Borland编译器发出的Turbo调试符号表(TDS)转换成类似stabs或dwarf格式的东西(看起来矮人更喜欢我的研究)。但理想情况下,我希望将我的工具设计为足够容易扩展,以便以后可以转换其他格式。例如codeview4甚至可能是pdb。

我创造这个的主要动机是:

  • 互操作性。如果我可以将外部调试格式转换为格式gdb可以使用,那么源代码级调试就可以在从gcc以外的其他编译器编译的二进制文件中进行。这意味着任何使用gdb作为后端的前端调试接口都可以正常工作。
  • 不存在其他工具。我做了一个谷歌搜索类似的工具,我发现最接近的是tds2dbg。但它并没有完全符合我的要求。

目前我必须与之合作:

  • 我已经有了debug hook API可以理解TDS调试格式。我可以用它来帮助我从我转换的源格式中获取所需的信息。
  • 对于这个项目的范围,我主要是想让它在win32环境下工作。其他我并不关心的平台和工具。
  • 我正在转换的目标矮人调试格式。这个我真的不熟悉。我之前使用过像minGW这样的gcc移植编译器,并使用dwarf格式用gdb调试它们。但我不知道如何在Windows上实现这种格式。

最后一点是我关注的问题。我正在阅读矮人规范文档,但我发现自己很难理解和理解它是如何工作的。那里有太多的细节,但同时它没有任何有关如何在不使用ELF的平台上的目标文件和图像文件上实现矮人的细节 - 即Windows使用的PE-COFF格式。文档也是一个非常干燥的阅读,长句使其难以理解,图表和插图是稀疏的。我遇到了一个名为libDwarf的API,它应该将大部分解析工作从解释矮人中解放出来。问题是我仍然试图让它构建,我还不知道它将如何运作。

我还没有编写任何代码,因为我不完全理解我需要构建的代码。我有一种感觉,最大的困难是找出如何与矮人一起工作,因为它的复杂性。谷歌搜索关于矮人如何在Windows下工作的信息也没有发现任何有用的信息。例如,没有关于在PE可执行映像文件中包含矮人所需的“粘合”代码的信息。矮人部分是如何精确布局的?每个部分都有标题信息吗? GDB显然不仅仅采用“原始”矮人调试文件并按原样使用它。那么gdb期望调试文件采用什么样的格式才能使用它呢?

我的问题是,我该如何开始这样的项目?更重要的是,当我不可避免地遇到问题时,我可以在哪里求助?

2 个答案:

答案 0 :(得分:2)

Windows的Affinic Assembler

Affinic Assembler是一个用于Windows的x86 / x86-64汇编程序,它使用带有DWARF调试信息的GAS语法汇编源,并在目标文件中生成相应的CodeView格式部分,以便在Visual Studio中调试链接的程序。这个程序适合Cygwin和MinGW用户将Linux代码移植到Windows。

http://www.affinic.com/?page_id=48

答案 1 :(得分:1)

你在这里问几个问题:-)

  1. 我认为你正朝着正确的方向前进,使用libdwarf。 但是,您是否看过objcopy,看看这个工具能否为您完成一些工作?它可能不支持borland,pdb或codeview4,但它可能值得研究。 (另一种方法可能是扩展objcopy以支持您尝试转换的格式。)

  2. 有时当我陷入困境时,我使用过矮人讨论的邮件列表。 http://lists.dwarfstd.org/listinfo.cgi/dwarf-discuss-dwarfstd.org

  3. 关于矮人的问题,将它们分成不同的问题,我会尽力而为 回答他们。 : - )