ErikPshat,
а как по мне, то нет =) Буду дома - проверю на консоли. |
Вложений: 2
Ну вот, например в файле есть такого вида смещения. И я вижу в этих же позициях в файле EBOOT.BIN именно эти же записи значений.
Вложение 10648 Последняя имеющаяся секция в файле = 0x0014D5D8. Там нет столько байт, как 0x08804000. Вот так показывает его смещение: Вложение 10649 Хотя, по аналогии со всеми другими смещениями, должно отображаться loc_0011A38C, потому что именно по тому адресу в EBOOT.BIN он прописал кнопки. Но не на loc_0891E38C. Хотя PSP видимо считывает и так и эдак. |
Цитата:
:scratch_one-s_head: |
riku.kh3, да в принципе лучше оставить, как есть. Работает замечательно.
А вот мой вариант я проверил, и не работает :) У меня рассчёт на смещение вроде правильный, там прописывается адрес 4-байтными шагами на байт. Просто номер функции MIPS видимо не такой. Но вроде верный. Там 1-ый байт 0х08 берёт адресацию 0х00000000, если 0х09, то адресация 0х04000000, если 0х0A, то 0х08000000ю |
Цитата:
насколько я понимаю, надо еще инструкцию добавлять и через регистр по правилам делать джамп, а места там нету |
riku.kh3, да не, джампов там полно, они в конце все.
J Цитата:
|
Хакеры, вашу мать :)
Scorpeg добавил 07.02.2015 в 16:59 Цитата:
Короче ликбез нумер два для Erik'a и сочувствующих. Во второй раз говорю (как уже ранее я писал и недавно писал Yoti) в память PSP Eboot грузится по адресу 0x08804000. Не каждая программа, но в 99% случаев это так (там прописано в общем-то в ебуте куда грузить). То есть eboot грузится по этому адресу в память PSP, принимай это как факт. Что происходит далее? Далее происходит применение релоцируемых данных или как их там по научному зовут. Суть их в чем - существует где-то в ебут табличка, где отмечены адреса с переходами (джампами). После загрузки проги в память PSP пробегает по всем адресам и относительное смещение (вот это вот j 0x1111 которое вы видите в других джампах в PRXTool) преобразует в абсолютное (в j 0x8804000+то число). Поэтому, если вы например вместо любой инструкции (кроме джампа) воткнете например j 0x33333 она у вас так и останется неправильно j 0x33333 потому что она отсутствует в таблицу-указателе на релоцируемые адреса. Поэтому Erik пошел вообще не туда. У меня код не имеет релоцируемых адресов - поэтому там указывать надо абсолютные адреса для джампов. |
Цитата:
|
Да потому что bne - это относительная инструкция. Там адрес считается в пределах +0xffff и -0xffff от КОМАНДЫ.
Поэтому ее загрузи в любое место - будет одинаковые результат. Она относительную адресацию использует. Поэтому все бранчи будут отображаться правильно, куда угодно их загрузи. Можешь для интереса кусок этот сохранить с бранчам и загрузить куда-нибудь еще - он все равно будет тебе правильные адреса показывать. То есть на деле оно выглядит как "прыгни на адрес, который равен текущему + сколько-то (но не больше 65535)". Ну или доку по мипсам прочитай, там ровно то же самое написано. А джамп использует абсолютную адресацию, поэтому там пишется абсолютный адрес. Бранчем нельзя же адресовать больше 65535 байт вперед и назад, а у меня он явно дальше ушел. Scorpeg добавил 07.02.2015 в 17:17 Цитата:
|
Цитата:
Цитата:
Код:
0x000B6270: 0x0802D866 'f...' - j loc_000B6198
|
Можешь проверить все смещения и этот алгоритм будет во всём файле применим.
Существует ещё правило, когда номера функций идут строго 2-байтные, то оставшиеся 2 байта значения пишутся младшими байтами(ессно до FFFF(65535)), а старшие байты просто отбрасываются. |
Ты по диагонали чтоли прочитал? Я про команду branch (bne например), не про jump. У джампа 3 байта + 2 бита (26 бит) под адрес, у бранча - 2 байта под указатель смещения (16 бит). Еще раз отсылаю читать доку по mips, а не спорить ради спора. А лучше в Never7 разбираться :)
Scorpeg добавил 07.02.2015 в 19:05 Цитата:
|
Вложений: 1
Цитата:
И по ходу дела, я смотрю структуру кода и сразу выписываю формулы, чтобы закрепить знания в постах. Тебе может это не надо, но другие люди тоже могут искать ответы на подобные вопросы и им может помочь информация, каким образом эти цифры появляются и генерируются в файлах. Короче, я просто посмотрел твои формулы и заметил, что ты использовал абсолютные смещения, хотя в EBOOT.BIN кругом используются относительные внутренние смещения. Поэтому подумал, почему бы не воспользоваться стандартами по аналогии с файлом, и вынес этот вопрос на обсуждение. От тебя просто хотелось услышать пояснения, почему был избран такой путь, а не то, как "у Erik'а задвиг не туда" или всякие ликбезы. Ладно, признаю, что я полный лох педальный. За твою реализацию хитрого плана с кнопками, присваиваю тебе звание Про-Геймера https://www.pspx.ru/forum/images/pspx/progamer.png ;) riku.kh3, почитал ещё раз твою ссылку: http://bbs.blacklabel-translations.c...?tid=35&pid=84 В первый раз как-то не так дошло и я не туда полез выполнять шаг 2. Сейчас наконец допёрло, что это относилось всё к тем же строкам. Там помимо смены $zero на регион, чтобы не было глюков, надо было ещё сменить функцию move на li. После первой правки было так, с move: Код:
0x0000C7D0: 0x00002025 '% ..' - move $a0, $zr Код:
0x0000C7D0: 0x24040008 '...$' - li $a0, 8 |
ErikPshat, это не то же самое? :)
|
Цитата:
Вообще есть такая вещь как armips https://github.com/Kingcom/armips собственно ассемблер для мипсов (может кто не знал). Я в нем писал. Мож кому-то будет полезно. Kingcom правда загрузку ELF'а в нормальном виде не прикрутил, так что придётся как я писать пока что. |
Цитата:
Я чёта не допёр сразу. Это вчера только боги спустились с небес и мне во сне объяснили что к чему. Только в тот раз я move не трогал, а просто сменил zero на 1 и у меня высвечивалось по-русски. В этот раз я поменял на li и всё стало по-английски, пришлось поменять 1 на 8. Но ты конечно изначально уже всё это сделал. Бывают у меня заскоки, когда глаза видят одно, а мозги вычисляют по другому. Просто когда до мозгов сразу не доходит, то они думают как-то иначе :) |
Цитата:
А за армированные мипсы спасибо. Было дело я когда-то в Mars-e умудрился написать программку на асме, где на кубике Yoti что-то там плавало. Да там собсно не С++ писать, это как батники рисовать, просто смотришь спецификацию и рисуешь. Но конечно в асме и мипсах я ничерта не шарю, всё держится только на логическом обосновании. |
Цитата:
И ты может начнешь уже Never7? Я тебе даже план уже написал, тулзы тут есть (вообще почти все тулзы подойдут отсюда, и формат графики тоже наверное). Осталось только скрипты повыдирать и присоединить. Ну и init.bin разватрушить (я не осилил пока что его целиком, только 75% гыгы) :crazy: |
Кстати по поводу картинок. Всё не так :) Это просто такие удачные картинки попались с одной колонкой.
А на самом деле оно выглядит так: http://psp4real.ru/_tr/kb_0.png И где-то там, в хедере, находится информация, как из этих квадратиков собрать нормальную картинку. |
Всем привет. Проект еще жив? На неделе разбирал ресурсы Remember11, пытаясь адаптировать перевод (заодно узнал что psp сцена почти умерла :( ). И столкнулся с некоторыми трудностями. Возможно, здесь мне кто-нибудь сможет помочь. И, конечно, готов поделиться всем, что обнаружил сам, если это окажется полезным.
Я, по возможности, реюзаю код комманды из tlwiki, которые занимались pc версией, попутно допиливая нужные изменения. С картинками много не заморачивался, т.к. пользы от этого мало. Зато разобрался со шрифтами, осталось только нормальный конвертор в bmp/png и обратно написать. Набросал скрипты для распаковки iso, распаковки AFS, декомпресии упакованных lzss-ом ресурсов, и переупаковки всего этого добра(или зла - зависит от восприятия) обратно. Ресурсы пока не модифицирую, не считая некоторой работы с BOOT.BIN руками, т.к. для начала хочу убедиться, что все правильно пакуется и сжимается. Все работает, с одним досадным исключением: если разжать и сжать обратно init.bin, то игра будет крешиться при загрузке. Через эмулятор тоже крешится, при чем сам эмулятор. А разжимать файл надо, т.к. туда вбита большая часть текста. Кто-нибудь сталкивался с такой проблемой? и как ее решили? Подскажите, можно ли как-то "дебажить ассемблер"? Подключить gdb к запущенному iso не знаю как, но мне нужно как-то определить где оно вылетает. |
Текущее время: 21:04. Часовой пояс GMT +3. |
Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2025, vBulletin Solutions, Inc. Перевод: zCarot
PSPx Forum - Сообщество фанатов игровых консолей.