Модификации > Русификация игры

Русификация Dwarf Fortress

<< < (448/452) > >>

Виктор Ерыгин:
С созданием доп. секции... Да ну нафиг) Мне тоже не улыбается цеплять какой-то дизассемблерный движок.
А что в EXE есть строки не заканчивающие нулём? Пример можете на вскидку привести?

insolor:
В С++ на уровне машинного кода в конструктор строки (или в ООП вариант strcat) передается указатель на начало строки, длина строки и указатель на объект-строку. В итоге имеем:

- где-то длина не указывается, там только адрес поменять.
- где-то длина указывается где-то рядом, там просто поменять
- где-то длина прописывается одной и той же инструкцией для нескольких строк (там где идет ветвление, например). Вариант с втыканием strlen прорабатывался, но оказалось что есть строки, которые не заканчиваются нулем, и универсальное решение не получилось. Но это тоже решаемо - в новой секции вставляется кусок кода с указанием длины, делается на него переход, потом переход обратно в основной код (после куска кода, прописывающего длину). Для подобных правок (и для следующего пункта) как раз нужен дизассемблерный движок.
- где-то строка собирается по кусочкам серией операций mov. Нужно этот код зачистить, заменить простым циклом. Отдельно нужно обработать случаи, когда две (или более) серии мувов пересекаются между собой.

Вариант с отдельной секцией хорош тем, что туда можно дописать и строки, и свои куски кода (тот же strlen, если его не получается

Виктор Ерыгин:
М-да, разработчик постарался.

Кстати, по поводу исходников

Дизассемблер ваш или взяли где-то?

insolor:

--- Цитата: Виктор Ерыгин от 14 Сентября 2019, 19:09:50 ---М-да, разработчик постарался.

Кстати, по поводу исходников

Дизассемблер ваш или взяли где-то?

--- Конец цитаты ---
Дизассемблер писал сам. Но если буду продолжать то скорее всего возьму zydis с оберткой для Python: https://github.com/zyantific/zydis-py

P.S. Не разработчик постарался, а современный оптимизирующий компилятор высокоуровневого языка программирования) Если бы писалось на чистом Си, тогда бы и машинный код был намного проще.

insolor:
Виктор Ерыгин, так что, берешься?)

Навигация

[0] Главная страница сообщений

[#] Следующая страница

[*] Предыдущая страница

Перейти к полной версии