Skip to content

kateBy/df_rus_linux

Repository files navigation

#Проект русификации Dwarf Fortress под Linux

Для его корректной работы должна быть установлена утилита objdump (содержится в пакете "binutils") В каталоге находится файл перевода trans.po.

  • Для начала нужно поместить в каталог файл или символьную ссылку на исполняемый файл Dwarf Fortress v42
  • Запустить rebuid_cache.py для создания кэша всех текстовых строк (и всего что на них похоже), а также указателей на них, так же будет производиться поиск строк-близнецов, т.е. строк, которые начинатся одинаково и компилятор для экономии использует одну и ту же строку, только с указанием разной длины
  • Запустить main.py, в результате которого будет создан модифицированный исполняемый файл Edited_DF

В процессе работы программы создается новая секция, которая представляет собой переведенные строки, разделенные между собой нулевым байтом. После этого с помощью утилиты objdump она встраивается в исполняемый файл, так же программно правится раздел "сегментов", где эта секция обозначается как необходимая для загрузки в память Далее происходит замена указателей строк в исполняемом файле на новые строки в созданной секции, а так же правится длина строки (если код подходит под шаблон) В конце правятся строки главного меню, которые в коде загружаются по 4 байта в стёк. Вместо них ставится jmp в новую секцию, где созданы заготовленные байты в том же виде.

После всраивания секции в исполняемый файл с помощью утилиты readelf получается смещение и длина предыдущей секции .bss, их сумма выравнивается до ближайшего кратного 4096 и это число с помощью objdump становится смещением новой секции. Следующее использование readelf позволяет получить его смещение в памяти, которое нужно указать в разделе сегментов, иначе секция не будет подгружена и при обращении к ней будут получены нулевые байты.

About

Проект русификации Dwarf Fortress под Linux

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors