![]() |
Добро пожаловать, гость ( Вход | Регистрация )
![]() |
Siberian GRemlin |
![]() ![]()
Сообщение
#1
|
![]() Advanced Member ![]() ![]() ![]() Группа: CTPAX-X Сообщений: 537 Регистрация: 4-February 08 Пользователь №: 2 Спасибо сказали: 222 раз(а) ![]() |
Уважаемые.
Добрался я до той ситуации, когда необходимо изменить длину строк в EXE, в частности под DOS. Как я понимаю, в бинарнике есть таблица с адресами и если мне нужно изменить длину первой строки (считаем от начала бинарника) на один символ (байт), то необходимо в таблице увеличить все значения адресов на единицу, кроме самого первого адреса (в смысле, адреса первой строки). Единственное, что мне пока неизвестно, где находится эта таблица в бинарнике и как там идёт индексация, а также адресация и есть ли где-то значение размера этой таблицы? Ещё в интернете ища информацию, натыкался на информацию о том, что существует прога для автоматического изменения текста с его длинной, ремаппингом и т.п., а также что люди сами писали подобные программы. Гипотетически это возможно, но как бы это выяснить... Может кто-от посоветует какие-нибудь статьи по данному вопросу (локализации текстовых констант в ЕХЕ) P.S.: Опытного человека, моё сообщение может показаться ламерским бредом... но хочется расти в творческом плане и в одиночку без глупых вопросов не обойтись. P.P.S.: Я доделываю русскую локализацию одной игры. |
![]() ![]() |
-=CHE@TER=- |
![]()
Сообщение
#2
|
Walter Sullivan ![]() ![]() ![]() Группа: Root Admin Сообщений: 1,373 Регистрация: 4-February 08 Пользователь №: 3 Спасибо сказали: 320 раз(а) ![]() |
Понятно. Хотя этот .EXE файл тоже не лучше - на строчку "Yes" я тоже ссылки не нашёл...
Ну, ладно. Так вот, насчёт строчки "aThePoison___" - щёлкаешь на ней мышкой, чтобы она подсветилась. Затем на клавиатуре жмёшь X (английская "икс"). В появившемся окне два раза кликаешь на смещение. Попадаешь примерно на такой вот код: CODE ovr136:002C add sp, 4 ovr136:002F push 0FFFEh ; int ovr136:0031 push 0 ; char ovr136:0033 push ds ovr136:0034 push offset aThePoison___; "The poison..." ovr136:0037 push 1B58h ; int ovr136:003A call sub_B6DA Теперь кликаешь по "offset aThePoison___" и, затем, сверху на вкладку "HEX-View A" - там выделится вся эта команда их трёх байт: 68 5A 0F. Так вот - 52 0F, вернее $0F5A - это как раз смещение до строки (68 - это, похоже, код команды PUSH WORD). Его и меняешь, на какое тебе нужно (заметь, что это смещение относительно начала ТЕКУЩЕГО оверлея - т.е. на строчку в другом оверлее ты просто не сможешь указатель сделать). Твоя строчка и находится там: CODE dseg:0F5A; char aThePoison___[] Видишь - 0F5A - вот этот адрес там и записан. Менять можно через любой HEX редактор. Я обычно ищу последовательность байт (например 00 1E 68 5A 0F), смотрю чтобы она находилась одна (чтобы не перепутать с другим кодом) и потом меняю что нужно. |
![]() ![]() |
Упрощённая версия | Сейчас: 9th May 2025 - 22:41 |