2010-06-24 25 views
5

¿Hay alguna forma de convertir la biblioteca COFF (archivo lib) a la biblioteca OMF para usar con C++ Builder6? Este coff no es solo una biblioteca de importación, sino que contiene algún código. Cuando trato de convertirlo usando coff2omf.exe de borland, obtengo un archivo de 1 KB del archivo de 15 KB.Conversión de archivo COFF lib al formato OMF

Respuesta

3

Es bastante típico que un archivo de objeto OMF sea un lote más pequeño que un objeto COFF equivalente, por lo que lo que está obteniendo puede ser válido.

Si ve que realmente no lo es, probablemente pueda descomponer el archivo lib en archivos de objetos individuales, desensamblar los archivos de objetos, volver a ensamblarlos en archivos de objeto OMF y juntarlos en un archivo OMF lib.

+0

Gracias por su respuesta. ¿Puede recomendarme las herramientas que puedo usar para desensamblar los archivos COFF obj y luego volver a ensamblarlos en los archivos obj de OMF? – CITBL

+0

Suponiendo que se ejecuta en Windows, puede desmontar un objeto COFF con 'dumpbin/disasm the_file.obj'. Eso produce una salida que está lista para MASM, aunque tendrá que quitar algunas columnas adicionales que incluye. Si no le importa gastar algo de dinero, * IDA Pro * producirá resultados listos para enviar a MASM directamente. De cualquier manera, probablemente haré el montaje con MASM. –

+0

Jerry, ¿podría proporcionar algunos ejemplos de los comandos para ejecutar MASM? Estoy intentando hacer esto, y no estoy seguro de cómo invocar MASM (o qué columnas deben eliminarse del resultado 'dumpbin'). –

2

Esto es bastante tarde, pero si alguien está buscando una respuesta, puede consultar COFFIMPLIB de DigitalMars. COFF2OMF está disponible en el mismo sitio, pero parece que es más antiguo.

6

En lugar de convertidor de DigitalMars, es posible utilizar el convertidor de archivos objeto disponible en http://agner.org/optimize

Esta utilidad se puede utilizar para convertir archivos de objetos entre COFF/PE, OMF, ELF y formatos de Mach-O para todas las plataformas x86 de 32 bits y 64 bits. Puede modificar nombres de símbolos en archivos de objetos. Puede construir, modificar y convertir las bibliotecas de funciones en todas las plataformas. Puede volcar archivos de objetos y archivos ejecutables . También incluye un desensamblador muy bueno que admite los conjuntos de instrucciones SSE4, AVX, AVX2, FMA y XOP. Código fuente incluido (GPL).

Este es un gran sitio para la optimización de bajo nivel, y hay una gran cantidad de información útil en el associated manual pdf file, sobre los formatos de la biblioteca a través de varias plataformas.

1

La integración de Delphi (omf) y Ada (gcc, coff) requirió mucho esfuerzo hasta que dejé de hacerlo en un solo exe.

Honestamente traté de desintegrar gcc rtl y ada rtl .a (bibliotecas coff) en lotes de .o (objetos), convertirlos a través de coff2omf (había DMD coff2omf y iirc otro convobj más o menos). Algunos de los coff .o no se convirtieron en .obj, por lo que no puedo decir si fue una manera confiable en absoluto.

La conversión a nivel de ensamblador no es tan simple cuando se trata de excepciones y otros detalles profundos.

Es una lástima que no he probado una herramienta llamada ftp://ftp.styx.cabel.net/pub/UniLink/

No es obvio, pero probablemente UniLink se puede utilizar para lograr el objetivo. Uno de sus objetivos es el paquete C++ Builder (tanto dinámico como estático). unilink -Tpp-GI debería hacer el truco

0

Puede valer la pena notar que en las versiones más nuevas de Delphi (> = XE2), el compilador acepta COFF al igual que OMF. Probablemente también sea cierto para C++ Builder. Los compiladores de 64 bits usan solo COFF. Consulte here para obtener más información sobre la vinculación de COFF.

Cuestiones relacionadas