Сообщение от ExzoTik
Я хочу заменить в vsh меню пункт "Частота ЦП Игра" на "Частота ЦП В Игре",но есть несколько проблем:
Моя строчка начинается со смещения 1450,отнимаю 60 получаю 13F0
Ищу в : http://s2.ipicture.ru/uploads/20110429/2U8tZC6R.png
Моё смещение 3,значит моё смещение BCC+60=C2C
Пишу в 1560 то что надо,из 1560 вычитаю 60,получаю 1500 и записываю 0015
Проверяю на PSP,а там отображается только верх меню,т.е PRO VSH MENU
Что не так?
|
Для начала, посмотрев на скрин, сразу хочу обмолвится по поводу кривизны подбора текстового редактора.
Сразу видно, что этот редактор "
AkelPad", для данного вида деятельности, очень не кстати подобран.
Просто сравнить, как дизассемблированный код отображается (в вашем случае) и как он должен выглядеть (в моём случае).
То есть, если хорошо присмотреться, то налицо криво упорядоченный код в первом случае. Текстовой код отображается не верно, вся структура файла идёт вкривь и вкось. Как можно работать с таким документом?
В моём случае, на втором скрине, отображено то же самое, но все столбцы очень чётко и стройно структурированы. С таким документом просто приятно работать, всё наглядно и ясно видно.
EmEditor Professional.
Это открытый последний файл дизасма
17_DISASM_wiXDRSMW.txt
У него на конце стоит
W.
Он просто отображает
Регистры с левой стороны, а
Смещения справа, что мне лично не совсем нравится.
На третьем скрине отображен предпоследний файл дизасма
17_DISASM_wiXDRSM.txt
Это фактически то же самое, только
Смещения отображены слева, а
Регистры справа.
Мне лично более удобнее рассматривать именно такое расположение. Потому что я привык читать слева направо и мне удобнее видеть сначала смещения, а уже правее, комментарии к ним. Ну это кому как нравится и в силу привычки, просто объяснил, чтобы была понятна разница.
Эту сборку PRXTool делал я, поэтому я не стал плодить кучу батников для дизасма, а собрал все возможные комбинации отображения кода в один, который раскладывает файл PRX на 12 всевозможных комбинаций. Это просто разные представления файла слева направо или справа налево, там выводятся разные регистры по нумерации или по мнемонике
r1,r2,3 или $v1,$v2,$v3,$sp,$ra, опять же, кто с чем привык работать.
Поехали дальше...
Тут меня
ExzoTik уже больше недели терроризировал в личку с вопросами такого плана: "
Ааааа!!!1111 Ничего не получается, всё куда-то съезжает!"
Ну конечно, каков вопрос - таков ответ. Я ведь не экстрасенс.
Ну приводил правда он мне какие-то цифры. Посмотрев через окошко на небо, я там видел голубой шаблон и подсчитав приведённые цифры, в очередной раз посылал читать статью по "
Расширению горизонтов"
В последний раз я уже не выдержал и послал его... сюда создавать тему, чтобы другие экстрасенсы помогли.
Ну вот, теперь он всё-таки осмелился только здесь раскрыть секрет и до меня теперь дошло, что цифры он мне приводил от
6.20 PRO-B5 VSH-меню.
Ну а так как точный ориентир теперь имеется и не нужно гадать, где находится иголка и в каком стоге сена, тогда экстрасенсов можно и не звать, а справиться самим.
*****
Лирическое вступление закончено. Переходим к делу...
Сообщение от ExzoTik
Моя строчка начинается со смещения 1450,отнимаю 60 получаю 13F0
|
- Тут всё правильно. Строка "CPU CLOCK GAME" находится именно там, в 0x1450.
- Если учесть, что все кастомные файлы собираются по одному и тому же SDK, то заголовок у ELF-файлов у всех стандартное - 0x60 (96 байт), хотя у официальных elf может быть абсолютно любым, размер заголовка всегда записывается в позиции 0x38.
*
И правильно, так как в хексе мы видим файл вместе с заголовком, а на самом деле все коды в теле файла записываются без учёта заголовка, тогда чтобы узнать настоящую позицию, нужно отнять от смещения в хексе - размер заголовка 0x60, получаем 13F0.
*
- Дизассемблим satelite.prx и находим это смещение:
- Как видим, по адресу "; Data ref 0x00001608" указывается сразу 4 смещения.
*
- Наше искомое находится на втором месте! - будем называть его образно "Второе смещение".
*
- Так как файлы ELF могут достигать необъятных размеров, то понятно, что в каком-нибудь огромном файле невозможно указать смещение одним или двумя байтами, поэтому принято прыжки по смещениям записывать в 4-ёхзначном формате (FF FF FF FF = 4'294'967'295 байт, а это 4 Гб - более, чем предостаточно).
*
- Значит, нам нужно проследовать по адресу "; Data ref 0x00001608" и найти "Второе смещение"
*
- Не забываем, что в хекс-редакторе нужно прибавить заголовок ELF, поэтому к 0x1608 прибавляем 0x60, получаем 0x1668.
*
- Ну и вот от этого 0x1668 отсчитываем "Второе смещение". То есть, тут ежу понятно, что "Первое смещение" - это и есть 0x1668, а "Второе смещение" будет на 4 байта дальше - 0x166C:
- Вот в этом 0x166C и сидит заветная цифра 0x000013F0, которая указывает на начало строки "CPU CLOCK GAME"
*
- По моему всё очень просто. Это делается намного короче, чем я здесь расписал
А вот это полный бред:
Сообщение от ExzoTik
Моё смещение 3,значит моё смещение BCC+60=C2C
Пишу в 1560 то что надо,из 1560 вычитаю 60,получаю 1500 и записываю 0015
Проверяю на PSP,а там отображается только верх меню,т.е PRO VSH MENU
|