У строк подменю "Paste Special" есть ссылки, только они не прямые, а
косвенные (посредством другого адреса/ссылки). Возьмем строку "
Insert", Обращение к этой строке выполняется инструкцией вида
lea r15, ds:[0x00000001415D1910]. Причем, адрес
00000001415D1910 является ссылочным и указывает не на строку, а на следующий адрес
00000001415CB758, по которому уже находится сама строка "Insert".
Рис. 1
Таким образом, вам нужно сделать перевод данной строки в другом месте, например в новой секции, и изменить в коде
только прямой адрес к этой строке, а ссылочный адрес оставить без изменений. Вот как ниже показан пример со строкой "Insert". В новом месте добавлен перевод и скорректирован прямой адрес к этой строке. Ссылочный адрес остался без изменений.
Рис. 2
Обратите внимание, что порядок записи байт адреса
обратный (от младшего к старшему). Аналогично нужно поступить и по остальным строкам этого подменю. Как видно из рис.1 (см. панель дампа), все прямые адреса на строки этого подменю находятся в одном месте и следуют друг за другом. Вот эти адреса вам необходимо скорректировать в отладчике с учётом адресации переведенных строк для подменю.
Касательно пунктов подменю "Rewind", "Play" в меню "Transport". По строке "Rewind" я проблем не увидел, просто для неё исправьте указатель длины в соответствии с длиной переведенной строки. Аналогично для строки "
Play", но с небольшим нюансом. Эта строка является
динамической. Если обратили внимание, то при включении воспроизведения она изменяется на "
Stop" и наоборот. Также, полагаю, вы обратили внимание на то, что длина этих строк, "Play" и "Stop", одинаковая - 5 байт (длина строк 4 байта плюс 1 байт на признак клавиши быстрого доступа (&)). Из-за этого у них в коде общий указатель длины. Он находится перед блоками кода с выбором установки соответствующих строк. Смотрите участок кода, представленный на рисунке ниже. Сначала командой
mov r8d, 0x5 в регистр
r8d заносится значение длины строки, а затем выбирается та или иная строка для установки в меню.
Рис. 3
Что делать? Можно немного переделать код так, чтобы для каждой их строк устанавливался указатель длины, соответствующий переведенным строкам. Это не сложно, если разбираетесь в ассемблере. А можно пойти другим путём. Сделать переводы строк одинаковой длины и потом на это значение скорректировать указатель длины. Например, переведем строки следующим образом: "Воспроизвести" и "Остановить". В кодировке UTF-8 длина первой строки -
1Ah байт, а второй -
14h байт. Строку "Остановить" дополняем пробелами до размера
1Ah байт. Вот так: "Остановить " (
6 пробелов). Затем корректируем в коде значение указателя длины для этих строк.
Рис. 4
Вы можете сделать перевод этих строк в Radialix, а потом в отладчике или НЕХ-редакторе изменить значение длины. Главное сделайте длину строку одинаковой, иначе более короткая строка потеряет клавишу управления (Space). Сохраняете изменения в файле; проверяете в работе.
Рис. 5