Конвертировать OMF16 в OBJ32
Есть ли способ конвертировать из 16-битного формата объектного файла OMF в 32-битный формат объектного файла COFF?
3 ответа
Предположительно код OMF16 предназначен для 16-битного реального режима x86 или 286 защищенного режима? В этом случае формат объектного файла на самом деле не является вашей проблемой, сам код полностью несовместим, поскольку в нем используются разные размеры регистров и другая схема адресации.
Более того, если код предназначен для DOS, Win16 или OS/2 (то есть для систем, использующих OMF16), то нацеливание его на 32-разрядную цель - это не просто случай преобразования формата объектного файла.
Вам нужно пересобрать из исходного кода, который дает теги к вопросу, является ли C или C++? Либо это, либо у вас есть серьезная задача обратного инжиниринга в ваших руках!
Я серьезно сомневаюсь, что такой будет. Код, предназначенный для работы в 16-битной среде, двоично несовместим с 32-битным режимом. Например, есть инструкция, которая указывает ЦПУ перевернуть размеры битов для следующей инструкции. В 16-битном режиме такая инструкция необходима для использования 32-битных инструкций. Однако тот же код операции необходим для использования 16-битных инструкций в 32-битном режиме.
В дескрипторе сегмента указывается, следует ли считать последовательность кодов операций 16 или 32 битами.
В любом случае, если у вас есть 16-битный код, который вы хотели бы использовать в 32-битном режиме, который не имеет зависимостей от ОС, вы можете использовать его, дизассемблируя его с помощью IDA, а затем перекомпилируйте его с 32-битным ассемблером. Конечно, только если это разрешено его лицензией. (хотя это может быть справедливое использование, но IANAL).
Если код также привязан к базовой ОС, это может быть намного сложнее и потребует переписывания, возможно, значительных частей кода.
Я искал в сети и нашел следующие ссылки: Первая - это набор инструментов:
http://sourceware.org/binutils/
Второй инструмент, который, я думаю, вам нужен: http://sourceware.org/binutils/docs/binutils/objcopy.html
Они работают не во всех случаях (bazsi77 выше), просто проверьте это.