Автор Тема: Русификация Dwarf Fortress  (Прочитано 410516 раз)

0 Пользователей и 2 Гостей просматривают эту тему.

Оффлайн Виктор Ерыгин

  • Новичок
  • *
  • Сообщений: 5
    • Просмотр профиля
Re: Русификация Dwarf Fortress
« Ответ #2235 : 14 Сентябрь 2019, 18:52:24 »
С созданием доп. секции... Да ну нафиг) Мне тоже не улыбается цеплять какой-то дизассемблерный движок.
А что в EXE есть строки не заканчивающие нулём? Пример можете на вскидку привести?

Оффлайн insolor

  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1053
  • Adequate Reverse Engineer
    • Просмотр профиля
Re: Русификация Dwarf Fortress
« Ответ #2236 : 14 Сентябрь 2019, 19:01:45 »
В С++ на уровне машинного кода в конструктор строки (или в ООП вариант strcat) передается указатель на начало строки, длина строки и указатель на объект-строку. В итоге имеем:

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

Вариант с отдельной секцией хорош тем, что туда можно дописать и строки, и свои куски кода (тот же strlen, если его не получается
« Последнее редактирование: 18 Сентябрь 2019, 08:16:14 от insolor »

Оффлайн Виктор Ерыгин

  • Новичок
  • *
  • Сообщений: 5
    • Просмотр профиля
Re: Русификация Dwarf Fortress
« Ответ #2237 : 14 Сентябрь 2019, 19:09:50 »
М-да, разработчик постарался.

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

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

Оффлайн insolor

  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1053
  • Adequate Reverse Engineer
    • Просмотр профиля
Re: Русификация Dwarf Fortress
« Ответ #2238 : 14 Сентябрь 2019, 19:13:00 »
М-да, разработчик постарался.

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

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

P.S. Не разработчик постарался, а современный оптимизирующий компилятор высокоуровневого языка программирования) Если бы писалось на чистом Си, тогда бы и машинный код был намного проще.
« Последнее редактирование: 14 Сентябрь 2019, 19:19:05 от insolor »

Оффлайн insolor

  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1053
  • Adequate Reverse Engineer
    • Просмотр профиля
Re: Русификация Dwarf Fortress
« Ответ #2239 : 15 Сентябрь 2019, 12:15:25 »
Виктор Ерыгин, так что, берешься?)

Оффлайн Виктор Ерыгин

  • Новичок
  • *
  • Сообщений: 5
    • Просмотр профиля
Re: Русификация Dwarf Fortress
« Ответ #2240 : 17 Сентябрь 2019, 18:34:51 »
Попробую по крайней мере)