有没有办法将COFF库(lib文件)转换为OMF库,以便与C++Builder6一起使用? 这个coff不仅是导入库,它还包含一些代码。 当我尝试使用Borland的coff2omf.exe进行转换时,我从15KB的文件中得到1KB的文件。
有没有办法将COFF库(lib文件)转换为OMF库,以便与C++Builder6一起使用? 这个coff不仅是导入库,它还包含一些代码。 当我尝试使用Borland的coff2omf.exe进行转换时,我从15KB的文件中得到1KB的文件。
您可以使用objconv
(位于agner.org/optimize)代替DigitalMars转换器,用于将目标文件在COFF/PE、OMF、ELF和Mach-O格式之间进行转换。可修改目标文件中的符号名称。可在不同平台上构建、修改和转换函数库。可转储目标文件和可执行文件。还包括一个支持SSE4、AVX、AVX2、AVX512、FMA3、FMA4、XOP和Knights Corner指令集的非常好的反汇编器。源代码已包含在内(GPL许可)。
这是一个很好的低级优化网站,在相关手册PDF文件中有关于跨多个平台的库格式的大量有用信息。
OMF目标文件通常比等效的COFF目标文件小得多,所以你得到的可能是有效的。
如果你发现它真的无效,那么你可以将lib文件分解为单独的目标文件,反汇编这些目标文件,重新组装它们成为OMF目标文件,然后将它们放在一起形成一个OMF lib文件。
将Delphi(omf)和Ada(gcc,coff)集成需要很多努力,直到我放弃了在单个exe中完成它。
老实说,我尝试将gcc rtl和ada rtl .a(coff库)分解为许多.o(对象),通过coff2omf进行转换(有DMD coff2omf和iirc另一个convobj或类似的工具)。一些coff .o无法转换为.obj,所以我无法确定这是否是可靠的方法。
当涉及异常和其他深层细节时,汇编级别的转换并不简单。
遗憾的是,我没有尝试过一个名为ftp://ftp.styx.cabel.net/pub/UniLink/的工具
虽然不明显,但UniLink可能可以用于实现目标。其中一个目标是C++ Builder包(动态和静态)。unilink -Tpp -GI
应该可以解决问题。
ml /c source_file.asm
。至于dumpbin,您将使用dumpbin /disasm object_file
,然后剪切源代码的部分。在大多数情况下,您需要手工添加(至少)像CPU、MODEL和END指示符,可能还要适当地添加PROC/ENDP等等。在左侧,您将有一个地址和指令字节,您还需要切掉它们,只留下实际的指令/操作数。它使用地址作为标签,因此您也需要在适当的位置添加真实的标签。 - Jerry Coffin