2

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

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

Спасибо

3 ответа3

7

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

5

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

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

2

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

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .