有没有办法从OMF 16位目标文件格式转换为COFF 32位目标文件格式?
发布于 2011-04-25 14:29:43
我非常怀疑有没有这样的人。设计为在16位环境中运行的代码与32位模式的二进制不兼容。例如,有一条指令告诉CPU为即将到来的指令翻转位大小。在16位模式中,需要这样的指令来使用32位指令。然而,在32位模式下使用16位指令需要相同的操作码。
假设一系列操作码是16位还是32位,在段描述符中指定。
无论如何,如果你有16位代码,你想在32位模式下使用,它没有操作系统依赖性,你可以使用IDA反汇编它,然后用32位汇编程序重新编译它。当然,只有在它的许可证允许的情况下。(虽然这可能是合理使用,但IANAL)。
如果代码还绑定到底层操作系统,这可能会更加困难,并且可能需要重写代码的重要部分。
发布于 2011-04-25 15:46:50
假设OMF16代码针对的是16位x86实模式或286保护模式?在这种情况下,目标文件格式实际上不是你的问题,代码本身是完全不兼容的,因为它使用不同的寄存器大小和不同的寻址方案。
此外,如果代码针对的是DOS、Win16或OS/2 (即使用OMF16的系统),那么将其针对32位目标不仅仅是转换目标文件格式的情况。
您需要从源代码重新构建,为问题提供标签的代码是C还是C++?要么就是你手上有一项重要的逆向工程任务!
发布于 2011-04-25 14:37:30
我在网上搜索过,发现了这些链接:第一个是工具的集合:
http://sourceware.org/binutils/
第二个是我认为您需要的工具:http://sourceware.org/binutils/docs/binutils/objcopy.html
它们并不是在所有情况下都能工作(上面的bazsi77),只是测试一下。
https://stackoverflow.com/questions/5775550
复制相似问题