有没有办法从 OMF 16 位目标文件格式转换为 COFF 32 位目标文件格式?
3 回答
我严重怀疑会存在一个。设计为在 16 位环境中运行的代码与 32 位模式二进制不兼容。例如,有一条指令告诉 CPU 为即将到来的指令翻转位大小。在 16 位模式下,使用 32 位指令需要这样的指令。然而,在 32 位模式下使用 16 位指令需要相同的操作码。
在段描述符中指定一系列操作码是假定为 16 位还是 32 位。
无论如何,如果您想在 32 位模式下使用 16 位代码,并且不依赖于操作系统,您可以通过使用 IDA 反汇编来使用它,然后使用 32 位汇编器重新编译它。当然,只有在其许可证允许的情况下。(虽然这可能是合理使用,但 IANAL)。
如果代码也与底层操作系统相关联,这可能会更加困难,并且可能需要重写代码的重要部分。
大概 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),只需对其进行测试。