Основные форумы > RusMe - РусМи!
PCem - проверка CRC32?
(1/1)
Kirill Borisenko:
Добрый день, коллеги.
Есть такая программка PCem, которая эмулирует почти любое компьютерное железо.
https://pcem-emulator.co.uk/index.html
Является по сути мастером по настройке плагинов, так что строк там немного.
Но для последней версии нет русифиактора (для предыдущих - есть).
И появляется предположение, - почему.
При изменении строк в любом редакторе, даже без изменения длин, программа просто отказывается запускаться.
Вероятно, в новых версиях встроена проверка контрольной суммы исполняемого файла.
Кто бы мог проверить это предположение?
leserg73:
Приветствую!
Программа не имеет каких-либо проверок исполняемого файла.
Создал проект перевода в Radialix, перевел несколько строк, создал локализованный файл - все работает и запускается.
Скрин 1
Скрин 2
Единственное, нужно быть аккуратным со встроенным ресурсом XRC (XML-формат).
Во-первых, переведенные строки должны быть в кодировке UTF-8. Во-вторых, его исходный размер и местоположение в файле должно остаться неизменным.
Т.е. напрямую в Radialix'е переводить его нельзя, т.к. он будет перенесен в конец файла. Поэтому с помощью Radialix его можно извлечь и необходимые строки перевести в текстовом редакторе, например Notepad++.
Исходный размер этого ресурса можно подогнать удалением пробелов форматирования (благо их там достаточно).
Затем при помощи НЕХ-редактора записать в файле поверх исходного ресурса.
Это можно сделать как ДО создания проекта перевода, так и ПОСЛЕ создания локализованного файла.
leserg73:
Продолжение...
Если умеете работать в отладчике, то тогда нет необходимости подгонять размер локализованного XRC-ресурса под размер исходного и не нужно использовать НЕХ-редактор.
Примерная последовательность необходимых действий будет следующей:
1) Извлекаем XRC-ресурс в проекте Radialix (контекстное меню "Сервис - Сохранить").
2) С помощью текстового редактора (например, Notepad++) переводим строки в тегах "title", "label" и "tooltip".
Можно также для этого ресурса создать проект перевода в Radialix и переводить в нём. В общем этот шаг на ваше усмотрение.
3) Полученный локализованный файл ресурса в проекте перевода файла вставляем на место русского перевода (контекстное меню "Сервис - Загрузить").
Только убедитесь, что файл ресурса не содержит метки BOM. Также в колонке "Исходная кодировка" для этого ресурса укажите кодировку UTF-8.
4) Создаем локализованный файл программы (не пытайтесь его запустить - он не будет работать).
5) Открываем полученный файл в отладчике (например, x64Dbg) и переходим на адрес ссылки XRC-ресурса, который можно узнать из Radialix (смотрите в колонке "Ссылки" соответственно для XRC-ресурса).
6) В коде программы выше команды обращения к XRC-ресурсу идет команда записи с размером этого ресурса. Это значение необходимо изменить на новое, которое соответствует размеру локализованного XRC-ресурса.
7) Сохраняем сделанные изменения в новый файл и проверяем его работу. Если все сделано без ошибок, программа запустится.
Kirill Borisenko:
--- Цитата: leserg73 от 13 Ноября 2023, 12:41:49 ---
5) Открываем полученный файл в отладчике (например, x64Dbg) и переходим на адрес ссылки XRC-ресурса, который можно узнать из Radialix (смотрите в колонке "Ссылки" соответственно для XRC-ресурса).
--- Конец цитаты ---
На картинке в примере адреса ссылок немного разные. Ссылка должна быть +/- как в Radialix или точной?
--- Цитата: leserg73 от 13 Ноября 2023, 12:41:49 ---6) В коде программы выше команды обращения к XRC-ресурсу идет команда записи с размером этого ресурса. Это значение необходимо изменить на новое, которое соответствует размеру локализованного XRC-ресурса.
--- Конец цитаты ---
Размер должен указываться в количестве байт текстового файла, указанном в шестнадцатеричном формате, или вычисляться исходя из количества символов, видимого в Radialix?
leserg73:
--- Цитата: Kirill Borisenko от 14 Ноября 2023, 21:37:54 ---На картинке в примере адреса ссылок немного разные. Ссылка должна быть +/- как в Radialix или точной?
--- Конец цитаты ---
Здесь все точно, без каких-либо допусков.
Radialix показывает адреса ссылок, а отладчик показывает адреса инструкций.
Инструкция со ссылкой находится по адресу 00460F66.
Размер инструкции mov dword ptr ss:[esp+4] составляет 4 байта (байты C7 44 24 04).
Остальные 4 байта (вторая часть инструкции) - ссылка на ресурс.
Тогда адрес этой ссылки будет 00460F66 + 4 = 00460F6A, что и показывает Radialix.
--- Цитата: Kirill Borisenko от 14 Ноября 2023, 21:37:54 ---Размер должен указываться в количестве байт текстового файла, указанном в шестнадцатеричном формате, или вычисляться исходя из количества символов, видимого в Radialix?
--- Конец цитаты ---
Radialix отображает длину строк в символах. И если для кодировок ANSI длина строк в символах и в байтах будет одинаковой, то в кодировке UTF-8 для кириллицы длина строки в символах и в байтах будет различной, так как на один символ кириллицы приходится уже 2 байта. В отладчике необходимо указать физический размер ресурса, т.е. не в символах, а в байтах. Поэтому в данном случае из Radilaix можно воспользоваться только оригинальной длиной ресурса (значение 142917) для ориентировки в отладчике. В шестнадцатеричном формате это будет значение 22E45, что и видно в отладчике (см. скриншот выше). А вот после перевода ресурса берём уже значение размера файла, который это ресурс занимает. Он в любом случае будет больше исходного. Также обратите внимание, что XRC-ресурс имеет Unix-формат конца строк (хотя, возможно, это не принципиально).
Навигация
Перейти к полной версии