Исправлена ​​жестко заданная настройка отображения без источника (24-битная, требуется 32-битная) - PullRequest
0 голосов
/ 30 апреля 2010

Я написал программу около 10 лет назад на Visual Basic 6, которая была в основном полноэкранной игрой, похожей на Breakout / Arkanoid, но имела фон в стиле демосцены. Я нашел программу, но не исходный код. Тогда я жестко запрограммировал режим отображения на 800x600x24, и программа вылетает всякий раз, когда я пытаюсь запустить его в результате. Кажется, ни одна виртуальная машина не поддерживает 24-битное отображение, когда режим отображения хоста является 16/32-битным. Он использует DirectX 7, поэтому DOSBox бесполезен.

Я перепробовал все виды декомпиляторов, и в лучшем случае они дают мне имена форм и кучу вызовов ассемблера, которые ничего не значат для меня. В качестве режима отображения использовался вызов DirectX 7, но в декомпиляции нет четкой ссылки на него.

В этой ситуации есть какие-либо указания на то, как я могу:

  • Укажите точный вызов функции в программе, которая устанавливает режим отображения на 800x600x24 (может быть, ResHacker?) И измените передаваемое ему значение, чтобы установить 800x600x32

  • просмотр / перехват вызовов DirectX, выполняемых во время его работы

или, если это невозможно, хотя бы

  • запустить программу в среде, которая эмулирует 24-битный дисплей

Мне не нужно восстанавливать исходный код (каким бы красивым он ни был), а просто хочу запустить его.

Ответы [ 2 ]

1 голос
/ 30 апреля 2010

Одна из техник, которую вы можете попробовать в своем дизассемблере, - это поиск констант, которые вы помните, но в качестве реальных байтов, которые будут содержаться в исполняемом файле. Я предполагаю, что вы использовали вызов DirectDraw SetDisplayMode, который является COM-объектом, поэтому его нельзя легко отследить до / от точки входа в DLL. Он принимает параметры для ширины, высоты и битов на пиксель, и они являются DWORD (32-битными), поэтому выполните поиск «58 02 00 00», «20 03 00 00» и «18 00 00 00». Надеюсь, это сузит его до того, что вам нужно изменить.

Кстати, какой дизассемблер вы используете?

Этот подход может быть несколько сложным, если ваша программа VB6 скомпилирована в p-код, а не в собственный код, поскольку вы просто получите огромный кусок данных, представляющих программу, а не полезные инструкции на ассемблере.

0 голосов
/ 30 апреля 2010

Проверьте это: http://www.sevenforums.com/tutorials/258-color-bit-depth-display-settings.html

Если ваша видеокарта не имеет записи для 24-битного дисплея .... Я думаю, взломать ваш код - единственная возможность. Это или найти старую машину, чтобы выкинуть windows 95 на: P.

...