Модификации > Русификация игры
Русификация Dwarf Fortress
Виктор Ерыгин:
С созданием доп. секции... Да ну нафиг) Мне тоже не улыбается цеплять какой-то дизассемблерный движок.
А что в EXE есть строки не заканчивающие нулём? Пример можете на вскидку привести?
insolor:
В С++ на уровне машинного кода в конструктор строки (или в ООП вариант strcat) передается указатель на начало строки, длина строки и указатель на объект-строку. В итоге имеем:
- где-то длина не указывается, там только адрес поменять.
- где-то длина указывается где-то рядом, там просто поменять
- где-то длина прописывается одной и той же инструкцией для нескольких строк (там где идет ветвление, например). Вариант с втыканием strlen прорабатывался, но оказалось что есть строки, которые не заканчиваются нулем, и универсальное решение не получилось. Но это тоже решаемо - в новой секции вставляется кусок кода с указанием длины, делается на него переход, потом переход обратно в основной код (после куска кода, прописывающего длину). Для подобных правок (и для следующего пункта) как раз нужен дизассемблерный движок.
- где-то строка собирается по кусочкам серией операций mov. Нужно этот код зачистить, заменить простым циклом. Отдельно нужно обработать случаи, когда две (или более) серии мувов пересекаются между собой.
Вариант с отдельной секцией хорош тем, что туда можно дописать и строки, и свои куски кода (тот же strlen, если его не получается
Виктор Ерыгин:
М-да, разработчик постарался.
Кстати, по поводу исходников
Дизассемблер ваш или взяли где-то?
insolor:
--- Цитата: Виктор Ерыгин от 14 Сентября 2019, 19:09:50 ---М-да, разработчик постарался.
Кстати, по поводу исходников
Дизассемблер ваш или взяли где-то?
--- Конец цитаты ---
Дизассемблер писал сам. Но если буду продолжать то скорее всего возьму zydis с оберткой для Python: https://github.com/zyantific/zydis-py
P.S. Не разработчик постарался, а современный оптимизирующий компилятор высокоуровневого языка программирования) Если бы писалось на чистом Си, тогда бы и машинный код был намного проще.
insolor:
Виктор Ерыгин, так что, берешься?)
Навигация
Перейти к полной версии