Quote (ErikPshat)
Andy_maN, расскажи, как узнать абсолютные смещения относительно относительных? Я чё-та не въехал, есть смещение %c, предполагаю, что в нём идёт перекрёстная ссылка на абсолютное смещение, но в данных не вижу.
нет нет нет
Я только что понял, что побудило тебя задать такой вопрос...
(видимо из за моей лени написать сразу готовые смещения - сложилось неверное впечатление о сути происходящего)
Ну чтож пристегните ремни, сейчас попробую ввести в курс дела. Рассмотрим функцию печати текста int printf ( const char * format, ... );
Допустим нам надо напечатать "X - exit | O - cancel"
Конечно это можно сделать многими способами, но мы используем тот что использовал автор трансфера
Для этого в нашем исходном коде мы определим константы кнопок:
#define PSP_CROSS 'X'
#define PSP_CIRCLE 'O'
В программе мы будем вызывать printf след. образом:
printf("%с - exit | %c - cancel",PSP_CROSS,PSP_CIRCLE)
Теперь самое время посмотреть что происходит во время компиляции:
Как я уже писал в соседней теме (про цвета рекавери) аргумент передаются через регистры (обычно $a0-$a3, если больше 4х то + $t0-$t9)
Скомпилировав данный код мы получим вот что:
#вначале пакуются все параметры
addui $a0, $a0, XXXX
#Где ХХХХ - это адресс самой строки "%с - exit | %c - cancel"
li $a1, 0x58
#Во второй параметр помещается значение PSP_CROSS = 'X' = 0x58
li $a2, 0x4f
#В третий параметр помещается значение PSP_CIRCLE = 'O' = 0x4F
jal printf
#Ну и в конце когда все подготовлено к запуску, вызываем саму функцию отрисовки
Вот так выглядит процесс если мы используем константы.
Quote (ErikPshat)
Я вижу в 142F7 заветную DB (отображение квадрата). В "Data Inspector" вижу в uint8 - 219 (позиция символа в десятичном виде). Ну это любая DB из 257-ти штук в этом файле имеет такой признак ))).
Попробую объяснить как я отыскал эти смещения, зная о вышеописанном механизме
Во первых знакомтесь [url=http://ps2dev.org/psp/Tools/PRXTool_1.1_(WIN32)/PRXTool_1.1]PRXTool[/url] самый неотъемлимый инструмент
Он поможет нам диссамблировать файлы (работает с ELF файлами, т.е. PBP для начала нада разобрать)
Кратко говоря: я разобрал трансфер и посмотрел у каких функций первым параметром передаются адресса строк с %с
сохранил смещения команд где загружаются остальные параметры (DB D8)
подсчитал разницу в смещениях
и соб-но запостил выше все что нужно