我正在寻找一种工具,旨在将一种格式的调试符号转换为另一种格式,以便在GDB下使用。这似乎是一个单调乏味且可能很复杂的项目,所以我不确定如何解决它。
最初我的目标是将Borland编译器发出的Turbo调试符号表(TDS)转换成类似stabs或dwarf格式的东西(看起来矮人更喜欢我的研究)。但理想情况下,我希望将我的工具设计为足够容易扩展,以便以后可以转换其他格式。例如codeview4甚至可能是pdb。
我创造这个的主要动机是:
目前我必须与之合作:
最后一点是我关注的问题。我正在阅读矮人规范文档,但我发现自己很难理解和理解它是如何工作的。那里有太多的细节,但同时它没有任何有关如何在不使用ELF的平台上的目标文件和图像文件上实现矮人的细节 - 即Windows使用的PE-COFF格式。文档也是一个非常干燥的阅读,长句使其难以理解,图表和插图是稀疏的。我遇到了一个名为libDwarf的API,它应该将大部分解析工作从解释矮人中解放出来。问题是我仍然试图让它构建,我还不知道它将如何运作。
我还没有编写任何代码,因为我不完全理解我需要构建的代码。我有一种感觉,最大的困难是找出如何与矮人一起工作,因为它的复杂性。谷歌搜索关于矮人如何在Windows下工作的信息也没有发现任何有用的信息。例如,没有关于在PE可执行映像文件中包含矮人所需的“粘合”代码的信息。矮人部分是如何精确布局的?每个部分都有标题信息吗? GDB显然不仅仅采用“原始”矮人调试文件并按原样使用它。那么gdb期望调试文件采用什么样的格式才能使用它呢?
我的问题是,我该如何开始这样的项目?更重要的是,当我不可避免地遇到问题时,我可以在哪里求助?
答案 0 :(得分:2)
Windows的Affinic Assembler
Affinic Assembler是一个用于Windows的x86 / x86-64汇编程序,它使用带有DWARF调试信息的GAS语法汇编源,并在目标文件中生成相应的CodeView格式部分,以便在Visual Studio中调试链接的程序。这个程序适合Cygwin和MinGW用户将Linux代码移植到Windows。
答案 1 :(得分:1)
你在这里问几个问题:-)
我认为你正朝着正确的方向前进,使用libdwarf。 但是,您是否看过objcopy,看看这个工具能否为您完成一些工作?它可能不支持borland,pdb或codeview4,但它可能值得研究。 (另一种方法可能是扩展objcopy以支持您尝试转换的格式。)
有时当我陷入困境时,我使用过矮人讨论的邮件列表。 http://lists.dwarfstd.org/listinfo.cgi/dwarf-discuss-dwarfstd.org
关于矮人的问题,将它们分成不同的问题,我会尽力而为 回答他们。 : - )