LINUX.ORG.RU

История изменений

Исправление Moisha_Liberman, (текущая версия) :

Статическое дизассемблирование усложняется тем, что большинство квестов реализованы через подгружаемые экзешники странного формата.

Да, тогда иной раз использовали оверлеи. Это некий такой аналог существующих сейчас разделяемых библиотек, но только без ф-ий вида dlopen(), dlsym(), dlclose(), dlerror(), т.е., и неспецифицированный и нестандартизированный. Причём, оверлеи писались в интересах одного приложения.

Так делали по разным причинам. Отчасти из-за пресловутого «640К хватит всем», а код тупо не помещался, отчасти из-за «защиты от отладки», отчасти из-за попыток создать некую модульность приложения.

Но, т.к. всё это было нестандартизировано, то каждый извращался как мог. Как оно работало? Да херово работало. Иногда работало, иногда нет. Просто потому, что в тот же регистр IP мы не можем напрямую записать адрес следующей исполняемой инструкции и тупо передать на неё управление.

Так что, тут дебажить надо две вещи (по хорошему, три, но не столь суть). Во-первых, разобраться с тем, как оверлей подгружается в адресное пространство процесса. А он подгружается, т.к. больше ему грузиться некуда. Во-вторых, посмотреть как ему передаётся управление. Стартует он вообще или нет. Ну и в третьих, как он возвращает управление родительскому процессу. На деле, падает как правило в первых двух вариантах (либо не смог загрузить, либо е смог передать управление). Вся эта беда как правило, писалась на ассемблере, а ассемблер на ассемблер для разных процов не приходился. Дело не в наборе инструкций (он-то был одинаков), дело было в том, как эти инструкции на разных процах работали (см. ниже).

Да, там DOS/4GW. В Досбоксе отладчик без проблем запускает основную программу и проводит инициализацию, но падает при переключении графического режима.

Рискну предположить что там ещё и переключение в защищённый режим может быть. Беда в том, что он появился ещё на 286х, ЕМНИП. Но защищённый режим на 286 и 386 (и старше) это несколько разные защищённые режимы. В 286 он весьма куцый, т.к. проц 16 бит и нет страничной организации памяти. Тут надо бы понять какой именно проц нужен, что, собственно, эмулируется.

Исходная версия Moisha_Liberman, :

А! Это оверлеи!

Статическое дизассемблирование усложняется тем, что большинство квестов реализованы через подгружаемые экзешники странного формата.

Да, тогда иной раз использовали оверлеи. Это некий такой аналог существующих сейчас разделяемых библиотек, но только без ф-ий вида dlopen(), dlsym(), dlclose(), dlerror(), т.е., и неспецифицированный и нестандартизированный. Причём, оверлеи писались в интересах одного приложения.

Так делали по разным причинам. Отчасти из-за пресловутого «640К хватит всем», а код тупо не помещался, отчасти из-за «защиты от отладки», отчасти из-за попыток создать некую модульность приложения.

Но, т.к. всё это было нестандартизировано, то каждый извращался как мог. Как оно работало? Да херово работало. Иногда работало, иногда нет. Просто потому, что в тот же регистр IP мы не можем напрямую записать адрес следующей исполняемой инструкции и тупо передать на неё управление.

Так что, тут дебажить надодве вещи. Во-первых, разобраться с тем, как оверлей подгружается в адресное пространство процесса. А он подгружается, т.к. больше ему грузиться некуда. Во-вторых, посмотреть как ему передаётся управление. Стартует он вообще или нет. Ну и в третьих, как он возвращает управление родительскому процессу. На деле, падает как правило в первых двух вариантах (либо не смог загрузить, либо е смог передать управление). Вся эта беда как правило, писалась на ассемблере, а ассемблер на ассемблер для разных процов не приходился. Дело не в наборе инструкций (он-то был одинаков), дело было в том, как эти инструкции на разных процах работали (см. ниже).

Да, там DOS/4GW. В Досбоксе отладчик без проблем запускает основную программу и проводит инициализацию, но падает при переключении графического режима.

Рискну предположить что там ещё и переключение в защищённый режим может быть. Беда в том, что он появился ещё на 286х, ЕМНИП. Но защищённый режим на 286 и 386 (и старше) это несколько разные защищённые режимы. В 286 он весьма куцый, т.к. проц 16 бит и нет страничной организации памяти. Тут надо бы понять какой именно проц нужен, что, собственно, эмулируется.