代码之家  ›  专栏  ›  技术社区  ›  greatwolf Romowski

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

  •  4
  • greatwolf Romowski  · 技术社区  · 14 年前

    我正在编写一个工具,旨在将一种格式的调试符号转换为另一种格式,该格式与gdb兼容。这似乎是一个冗长且可能很复杂的项目,所以我不确定如何解决它。

    最初,我的目标是将Borland编译器发出的turbo调试符号表(tds)转换为stabs或dwarf格式(看起来dwarf更适合我的研究)。但理想情况下,我希望设计我的工具,使其易于扩展,以便在以后转换其他格式。例如,codeview4,甚至可能是pdb。

    我的主要动机是:

    • 互操作性。如果我可以将一种外部调试格式转换成gdb可以使用的格式,那么源代码级的调试就可以在由其他编译器(而不是gcc)编译的二进制文件上进行。这意味着任何使用gdb作为后端的前端调试接口也可以工作。
    • 不存在其他工具。我在谷歌上搜索过类似的工具,最接近的是 tds2dbg . 但它不完全符合我的要求。

    我现在要做的是:

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

    最后一点是我所关心的。我正在阅读DWARF规范文档,但我发现我无法真正理解和理解它的工作原理。其中有太多的细节,但同时它也没有关于如何在对象文件和图像文件上实现DWARF的任何细节,这些文件和图像文件是在一个不使用ELF的平台上实现的,即Windows使用的PE-COFF格式。文档也是一种非常枯燥的阅读方式,长句让人难以理解,图表和插图也很稀少。我遇到一个API libDwarf 这将使大多数解析工作从解释dwarf中消失。问题是,我仍在努力让它建立起来,我还不知道它将如何解决。

    我还没有写任何代码,因为我不完全理解我需要构建什么。我有一种感觉,最大的伤害将是如何与侏儒工作,因为它的复杂性。搜索矮人如何在Windows下工作的信息也没有发现任何有用的信息。例如,在PE可执行映像文件中包含dwarf所需的“glue”代码没有相关信息。矮型部分的布局如何?每个部分都有标题信息吗?显然,gdb不只是获取一个“原始”的侏儒调试文件并按原样使用它。那么,gdb希望调试文件采用哪种格式才能使用它呢?

    我的问题是,我如何开始这样一个项目?更重要的是,当我不可避免地陷入一个问题时,我可以向哪里寻求帮助?

    2 回复  |  直到 12 年前
        1
  •  1
  •   Torleif    14 年前

    你在这里问了几个问题:—)

    1. 我觉得你用libdwarf朝着正确的方向前进。 但是,您有没有看一下objcopy,看看这个工具是否可以为您做一些工作?它可能不支持Borland、PDB或CodeView4,但可能值得研究。(另一种方法可能是扩展objcopy以支持您试图在两者之间转换的格式。)

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

    3. 至于矮子的问题,把它们分成几个单独的问题,我会尽力的。 回答他们。-)

        2
  •  2
  •   Yin Ma    14 年前

    用于Windows的仿射汇编程序

    affinic assembler是一个用于Windows的x86/x86-64汇编程序,它使用带有DWARF调试信息的气体语法汇编源代码,并在对象文件中生成相应的代码视图格式部分,以使链接程序在Visual Studio中可调试。这个程序很适合Cygwin和Mingw用户将Linux代码移植到Windows。

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

    推荐文章