![]() |
Добро пожаловать, гость ( Вход | Регистрация )
![]() |
Siberian GRemlin |
![]() ![]()
Сообщение
#1
|
![]() Advanced Member ![]() ![]() ![]() Группа: CTPAX-X Сообщений: 537 Регистрация: 4-February 08 Пользователь №: 2 Спасибо сказали: 222 раз(а) ![]() |
Уважаемые.
Добрался я до той ситуации, когда необходимо изменить длину строк в EXE, в частности под DOS. Как я понимаю, в бинарнике есть таблица с адресами и если мне нужно изменить длину первой строки (считаем от начала бинарника) на один символ (байт), то необходимо в таблице увеличить все значения адресов на единицу, кроме самого первого адреса (в смысле, адреса первой строки). Единственное, что мне пока неизвестно, где находится эта таблица в бинарнике и как там идёт индексация, а также адресация и есть ли где-то значение размера этой таблицы? Ещё в интернете ища информацию, натыкался на информацию о том, что существует прога для автоматического изменения текста с его длинной, ремаппингом и т.п., а также что люди сами писали подобные программы. Гипотетически это возможно, но как бы это выяснить... Может кто-от посоветует какие-нибудь статьи по данному вопросу (локализации текстовых констант в ЕХЕ) P.S.: Опытного человека, моё сообщение может показаться ламерским бредом... но хочется расти в творческом плане и в одиночку без глупых вопросов не обойтись. P.P.S.: Я доделываю русскую локализацию одной игры. |
![]() ![]() |
Siberian GRemlin |
![]()
Сообщение
#2
|
![]() Advanced Member ![]() ![]() ![]() Группа: CTPAX-X Сообщений: 537 Регистрация: 4-February 08 Пользователь №: 2 Спасибо сказали: 222 раз(а) ![]() |
'Если хочешь, чтобы что-то было сделано хорошо - сделай это сам.' - древняя мудрость.
Не хочу зависеть от разработчиков какой-то непонятной проги, в которой поддержка 2 и 3 частей неизвестно в какой пятилетке будет... Не успел несколько дней назад отписаться - инет кончился: Отбой. Я придумал пару хитростей (просто повезло с тем что разработчики дублировали некоторые строки, а я указатели дубляжей перенаправил на первый встречающийся экземпляр, а оставшееся место использовал в свою усмотрение) + разобрался с IDA и даже умудрился научиться изменять размеры кнопок =) ![]() Пока есть только 1 проблемка, когда адрес на начало строки пихается в стэк - push именно это и делает если я понимаю, только непонятно где там адрес сам, чтобы его сменить. Можно мне подсказать, если я покажу кусок кода на асме с этим моментом? |
-=CHE@TER=- |
![]()
Сообщение
#3
|
Walter Sullivan ![]() ![]() ![]() Группа: Root Admin Сообщений: 1,373 Регистрация: 4-February 08 Пользователь №: 3 Спасибо сказали: 320 раз(а) ![]() |
Пока есть только 1 проблемка, когда адрес на начало строки пихается в стэк - push именно это и делает если я понимаю, только непонятно где там адрес сам, чтобы его сменить. Можно мне подсказать, если я покажу кусок кода на асме с этим моментом? Пустил MAIN.EXE под IDA, что-то там куча строк, которые она даже не распознала - т.е. на них нет прямого указателя. Такое ощущение, что они там через базу+смещение до нужной строки, работают. На ту же строчку "Yes" я нигде явной ссылки не нашёл. Что-то я не там ищу что-ли?Можешь, конечно, выложить код, но там не должно быть ничего сложного: - если твоя новая строчка находится раньше старой, то просто считаешь между ними разницу и отнимаешь от того числа, которое суётся в стэк - если строчка находится позже оригинальной - проделываешь всё тоже самое, только прибавляешь к число разницу |
![]() ![]() |
Упрощённая версия | Сейчас: 9th May 2025 - 22:58 |