将OMF16转换为OBJ32

| 有没有一种方法可以将OMF 16位目标文件格式转换为COFF 32位目标文件格式?     
已邀请:
我严重怀疑是否会存在一个。设计为在16位环境中运行的代码与32位模式二进制不兼容。例如,有一条指令告诉CPU翻转即将到来的指令的位大小。在16位模式下,需要使用32位指令。但是,在32位模式下使用16位指令需要相同的操作码。 在段描述符中指定是将一系列操作码假定为16位还是32位。 无论如何,如果您要在32位模式下使用16位代码,并且没有操作系统依赖性,则可以使用IDA对其进行反汇编,然后使用32位汇编器对其进行重新编译,以使用该代码。当然,只有在其许可证允许的范围内。 (尽管这可能是合理使用,但是IANAL)。 如果代码也与底层OS绑定在一起,则可能会困难得多,并且可能需要重写代码的重要部分。     
大概OMF16代码是针对16位x86实模式还是286保护模式的?在这种情况下,目标文件格式并不是真正的问题,代码本身完全不兼容,因为它使用不同的寄存器大小和不同的寻址方案。 此外,如果代码针对的是DOS,Win16或OS / 2(即使用OMF16的系统),那么将其定位为32位目标不只是转换目标文件格式的情况。 您需要从提供标记的源重新构建,问题是C还是C ++?要么,要么您手上有一项重大的逆向工程任务!     
我在网上搜索,找到了以下链接: 第一个是工具集: http://sourceware.org/binutils/ 第二个是我认为您需要的工具: http://sourceware.org/binutils/docs/binutils/objcopy.html 它们并非在所有情况下都有效(请参见上面的bazsi77),只需对其进行测试。     

要回复问题请先登录注册