Локализация EXE, Изменение длины строковых констант в EXE |
Добро пожаловать, гость ( Вход | Регистрация )
Локализация EXE, Изменение длины строковых констант в EXE |
Siberian GRemlin |
Jun 29 2007, 16:52
Сообщение
#1
|
Advanced Member Группа: CTPAX-X Сообщений: 537 Регистрация: 4-February 08 Пользователь №: 2 Спасибо сказали: 221 раз(а) |
Уважаемые.
Добрался я до той ситуации, когда необходимо изменить длину строк в EXE, в частности под DOS. Как я понимаю, в бинарнике есть таблица с адресами и если мне нужно изменить длину первой строки (считаем от начала бинарника) на один символ (байт), то необходимо в таблице увеличить все значения адресов на единицу, кроме самого первого адреса (в смысле, адреса первой строки). Единственное, что мне пока неизвестно, где находится эта таблица в бинарнике и как там идёт индексация, а также адресация и есть ли где-то значение размера этой таблицы? Ещё в интернете ища информацию, натыкался на информацию о том, что существует прога для автоматического изменения текста с его длинной, ремаппингом и т.п., а также что люди сами писали подобные программы. Гипотетически это возможно, но как бы это выяснить... Может кто-от посоветует какие-нибудь статьи по данному вопросу (локализации текстовых констант в ЕХЕ) P.S.: Опытного человека, моё сообщение может показаться ламерским бредом... но хочется расти в творческом плане и в одиночку без глупых вопросов не обойтись. P.P.S.: Я доделываю русскую локализацию одной игры. |
-=CHE@TER=- |
Jul 3 2007, 16:40
Сообщение
#2
|
Walter Sullivan Группа: Root Admin Сообщений: 1,361 Регистрация: 4-February 08 Пользователь №: 3 Спасибо сказали: 314 раз(а) |
Понятно. Хотя этот .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), смотрю чтобы она находилась одна (чтобы не перепутать с другим кодом) и потом меняю что нужно. |
Siberian GRemlin |
Jul 4 2007, 04:50
Сообщение
#3
|
Advanced Member Группа: CTPAX-X Сообщений: 537 Регистрация: 4-February 08 Пользователь №: 2 Спасибо сказали: 221 раз(а) |
Понятно. Хотя этот .EXE файл тоже не лучше - на строчку "Yes" я тоже ссылки не нашёл... А мне почему-то думается, что IDA игнорирует короткие строчки и не вносит их в список. Я, например, эти строчки искал так: посмотрел в TotalCmd какие рядом есть подлиннее - кажись "Main menu", в списке перешёл к нему и в коде уже нормально копался с ней и с короткими возле неё. А можно определение Overlay'я? P.S.: Спасибо большое. Моя жизнь стала ещё прекраснее и я теперь смогу сделать перевод ещё лучше! |
Упрощённая версия | Сейчас: 1st October 2024 - 12:14 |