Есть ли способ конвертировать 16-битное приложение DOS в 32-битное?

6242
Daniel Wardin

Есть ли способ преобразовать 16-битное приложение DOS в 32-битное, чтобы я не был ограничен пределом 16383? Или, может быть, есть способ запустить 16-битное приложение как 32-битное приложение без его преобразования?

У меня нет исходного кода для программы, поэтому я не могу его перестроить.

Спасибо

2

3 ответа на вопрос

7
magicandre1981

Вы не можете конвертировать их. Только если у вас есть источник, вы можете перекомпилировать их как 32-битные.

спасибо, я думал, что это будет так, но хотел убедиться, Daniel Wardin 11 лет назад 0
В этом случае перекомпиляция, скорее всего, повлечет за собой перекодирование - настройку API-вызовов, дескрипторов и т. Д., Так что дело не только в том, чтобы иметь переменные большего размера M.Bennett 11 лет назад 3
Вопрос был не совсем ясен по этому поводу, но хотя перекомпиляция была бы единственным способом сделать это, проблема здесь не только в архитектуре, ее типах переменных. Даже если он перекомпилировал его, оно все еще является «коротким» целым числом, а не стандартным или длинным целым числом. Journeyman Geek 11 лет назад 1
5
Dan Neely

Такие сервисы, как Good Old Games, для того, чтобы заставить действительно старые игры (например, 16-битные) работать на современных системах, заключаются в объединении исполняемого файла dos и виртуальной машины так, чтобы игра думала, что она работает в DOS, а виртуальная машина переводит все низкоуровневое аппаратное взаимодействие, которое DOS-игры выполняют в стандартных командах операционной системы Windows / Mac / Linux.

Вы можете сделать то же самое, чтобы запускать устаревшие приложения на современном оборудовании, заставляя новую ОС думать, что она запускает 32-битное приложение; но все старые 16-битные системные ограничения останутся.

DosBox - это хорошая программа, которая удовлетворяет потребности. Это позволит вам запускать 16-битные игры в современной 64-битной системе. Scott Chamberlain 11 лет назад 2
2
Journeyman Geek

Я предполагаю, что под пределом 16383 вы подразумеваете максимальный целочисленный размер переменной, который может обрабатывать 16-битное программное обеспечение (и с тех пор, как я это сделал, прошло столько времени, что мне пришлось его искать). Нет реального способа сделать это без изменения типа переменной - в этом случае короткие целые числа на длинные целые.

Предположим, у нас есть волшебное программное обеспечение, которое позволяет нам запускать 16-битное программное обеспечение со всеми атрибутами 32- или 64-битной системы - вы сможете получить доступ к большему объему памяти, но это все еще 16-битная переменная с коротким целым числом. Вы также можете ускорить процесс, запустив несколько экземпляров. Однако нельзя просто превратить короткое целое в длинное, изменив архитектуру.

Нет абсолютно никакого способа, без взлома исходного кода (ну почти), чтобы это исправить. Я полагаю, если бы вы были ниндзя 1337 года, разбирающего демонстрант, вы могли бы запустить диссамблера, определить, где находится эта переменная, и преобразовать ее в длинное целое число. Однако в этот момент вам лучше разобраться в логике программного обеспечения и переписать его.

Источники: документация заголовка C ++