C 如何将STAB调试信息放入Win32 PE文件?

C 如何将STAB调试信息放入Win32 PE文件?,c,windows,gcc,mingw,dwarf,C,Windows,Gcc,Mingw,Dwarf,我问这个是因为我被赋予了一项我还不知道如何处理的任务。你看,我们现在的处境是,我们可以在运行非常旧的linux内核的虚拟机上执行遗留的a.out程序。我们希望本地MinGW gdb以某种方式调试程序。有人建议我们将a.out文件转换为包含调试符号的PE文件,并将其发送到GDB进行处理,同时在虚拟机上实际运行UNIX a.out文件。a.out文件附带的唯一可用调试符号是stab,因为VM上使用的GCC版本非常旧 我知道可以将STAB调试信息添加到PE文件中。GCC做到了这一点,我已经用objdu

我问这个是因为我被赋予了一项我还不知道如何处理的任务。你看,我们现在的处境是,我们可以在运行非常旧的linux内核的虚拟机上执行遗留的a.out程序。我们希望本地MinGW gdb以某种方式调试程序。有人建议我们将a.out文件转换为包含调试符号的PE文件,并将其发送到GDB进行处理,同时在虚拟机上实际运行UNIX a.out文件。a.out文件附带的唯一可用调试符号是stab,因为VM上使用的GCC版本非常旧

我知道可以将STAB调试信息添加到PE文件中。GCC做到了这一点,我已经用objdump和gdb做了足够全面的实验,得出结论,STABS可以与MinGW gdb一起工作。那么我如何实现它呢?GCC是如何做到这一点的


谢谢。

如果你的实际目标是a.out,你为什么要用体育课呢?@JonathonReinhart不太清楚。a.out文件将在虚拟机中的linux上运行;使用的GDB版本是MinGW附带的版本,MinGW只接受PE文件。我不太明白你的意思,我以为STABS仍然受支持。通过Windows主机远程调试从虚拟机运行的Linux进程当然是可能的,尽管这很麻烦,但您似乎建议尝试使用本机Windows构建中的符号来跟踪远程进程。这是行不通的,如果没有其他东西,调试数据中的偏移量将一点也不相同,您将在垃圾中单步执行。为什么你不能直接在本地调试进程?@doynax我不知道我是否直接从我的主管那里得到了事实,但是现有的产品将linux内核代码编译成一个exe文件,然后处理成一个bin文件在VM上运行。我们的想法是用同一个调试器调试内核和在内核上运行的应用程序。@doynax所以我们的想法是通过VM在linux上运行a.out文件,将应用程序的a.out文件转换为PE文件,以便基于windows的MinGW gdb进行调试。虚拟机程序Bochs将发送GDB关于断点位置的信息,GDB引用PE文件,返回它从调试符号派生的任何信息。这种方法能奏效吗?