ErikPshat, прочитал тему и загорелся наконец-то желанием попробовать переписать плагин FuSa_SD под 6.60. Сам с программирование под PSP не знаком, но имею опыт "офисного" программирования на VBA И C#. Но как я понимаю принцип портирования сводится в общем случае к следующему:
-декриптовка prx на самой PSP
-дисассембл через prxtools
-правка кода (обновление команд старой прошивки новыми)
-сборка нового prx
Или я что-то пропустил?
Еще интересует вопрос, есть ли критичные особенности в написании кода плагина при ориентации на PSPgo?
Другие консоли: Все PSP, все PSV, SCPH-1002, SCPH-102, SCPH-77008, CECH-4208C, SCPH-1000R
Регистрация: 19.03.2008
Адрес: Россия
Сообщений: 5,732
Вы сказали Спасибо: 819
Поблагодарили 3,834 раз(а) в 2,013 сообщениях
Сила репутации: 1
Репутация: 3834 
(репутация неоспорима)
GreeDi,
после дизасма ты получишь не исходный код, а псевдо-код. Который нельзя скомпилировать и который будет отдалённо похож на оригинальный. Так что плагин ты будешь писать практически с ноля.
Понятное дело, что у любого плагина есть исходники (у автора), вот только через сайт с разрабом не связаться. Его там уже полтора года не было, а контактной информации он там не оставил никакой(((
только через сайт с разрабом не связаться. Его там уже полтора года не было, а контактной информации он там не оставил никакой(((
Ну тогда есть другой способ аналогичный. Вместо исходников использовать PRX Tool. Он тебе, как на тарелочке, выдаст все используемые программой ниды. Затем останется хекс-редактором заменить их на ниды от 6.60.
Исходный код самому писать нет нужды, достаточно подать питание в верхнюю конечность.
Ну тогда есть другой способ аналогичный. Вместо исходников использовать PRX Tool. Он тебе, как на тарелочке, выдаст все используемые программой ниды. Затем останется хекс-редактором заменить их на ниды от 6.60.
Чтож, решил всё-таки попытаться. Исходя из описания плагина на сайте, он адаптирован для 5.00.
В итоге:
1. Декриптовал FuSa.prx на своей консоли.
2. Выдернул ниды с помощью PRXTools
3. Как по инструкции "Удаляем все лишние строки со статическими функциями, т.е. у которых нет в названии функции суффикса с 4-значным НИДом". Итого остались:
0xADF12745 [0x00000180] - syslib_ADF12745
0x159AF5CC [0x000026E8] - SystemCtrlForKernel_159AF5CC
0x737486F2 [0x000026F0] - scePower_driver_737486F2
0x5B5AEFAD [0x00002700] - sceDisplay_driver_5B5AEFAD
0x3A622550 [0x00002708] - sceCtrl_driver_3A622550
0xD8779AC6 [0x00002710] - LoadCoreForKernel_D8779AC6
0x237DBD4F [0x000027C0] - SysMemForKernel_237DBD4F
0xB6D61D02 [0x000027C8] - SysMemForKernel_B6D61D02
0x9D9A5BA1 [0x000027D0] - SysMemForKernel_9D9A5BA1
0x3FC9AE6A [0x000027D8] - SysMemForKernel_3FC9AE6A
4. Начал сопоставлять ниды с libdoc'ами 5.00 и обнаружил, что начиная 5.00 по 6.60 все до единого совпадают. Быть может я не правильно дизасил эти прошивки? Скачивал их с этого сайта и подсовывал батнику "24. DISASM2HTML", который выдавал файл "24_DISASM_XDRSMW". В нем и смотрел.
Предполагаю, что не сделал описанное в этой теме и дизас у меня вышел - непонятно что...
Направьте на путь истинный, плиз!
GreeDi, ты всё сделал правильно, с 1-го по 3-ий пункт включительно. Видимо с подачей питания проблем нет
Но вот в 4-ом пункте мне не совсем верится, что ниды от 5.00 по 6.60 все сходятся.
Либдоки последние есть на 5.00. Я так понял, что ты их правильно скачал из этой темы: https://www.pspx.ru/forum/showthread.php?t=104558 (последняя вкладка "PRX Libraries Documentation"
Определяешь, каким файлам прошивки соотносятся эти ниды.
Дербанишь эти же файлы от 6.60 и сопоставляешь.
Сейчас сам проверить не могу, других дел много. Возможно завтра или позже...
Последний раз редактировалось LaKosta; 30.07.2014 в 16:43.
GreeDi, ты всё сделал правильно, с 1-го по 3-ий пункт включительно. Видимо с подачей питания проблем нет
Но вот в 4-ом пункте мне не совсем верится, что ниды от 5.00 по 6.60 все сходятся.
Либдоки последние есть на 5.00. Я так понял, что ты их правильно скачал из этой темы: https://www.pspx.ru/forum/showthread.php?t=104558 (последняя вкладка "PRX Libraries Documentation"
Сейчас сам проверить не могу, других дел много. Возможно завтра или позже...
Да, эти либдоки скачал, но видимо я что-то до этого нет так сделал. Сейчас проверил 5.00 и 4.05, и что-то нет совпадений((( Модули сами по названию совпадают (например scePower_driver и sceDisplay_driver), но хеши-постфиксы другие. И некоторые модуле вообще не получилось найти (например, SystemCtrlForKerne). Сдается, что не для 5.00 плагин был написан. А либдоки для прошивок выше 5.00 существуют, или их ручками собирать придётся?
GreeDi добавил 31.07.2014 в 16:05
Перелапатил уже все либдоки и нашел всего одно полное совпадение в прошивке 3.52 по модулю sceDisplay_driver_5B5AEFAD. Выглядело так:
Другие консоли: Все PSP, все PSV, SCPH-1002, SCPH-102, SCPH-77008, CECH-4208C, SCPH-1000R
Регистрация: 19.03.2008
Адрес: Россия
Сообщений: 5,732
Вы сказали Спасибо: 819
Поблагодарили 3,834 раз(а) в 2,013 сообщениях
Сила репутации: 1
Репутация: 3834 
(репутация неоспорима)
Сообщение от GreeDi
а контактной информации он там не оставил никакой
На самом деле, найти информацию легко. Но автор ставит условием для передачи исходников на публику согласие полной команды разработчиков. И искать их тебе придётся самому =)
На самом деле, найти информацию легко. Но автор ставит условием для передачи исходников на публику согласие полной команды разработчиков. И искать их тебе придётся самому =)
Думаю вариант с заменой нидов более реален) Хотя всё не так просто в любом случае, но усилия того стоят)
GreeDi, нужно, чтобы точно совпадало название функции с хешем и искомое. Особо не опирайся на либдоки от 5.00, возможно в базе не все функции забиты. Ты сам должен отдизасмить соответствующие файлы прошивки 5.00 на полный комплект нмдов. Затем искать в них соответствия.
Возможно ниды использовались совсем даже не от 5.00, поэтому нужно лопатить другие прошивки, до достижения цели.
LaKosta, спасибо! Буду лопатить) А то что фуса для слимок предназначался может стать проблемой при запуске на PSP go?
Я вроде слышал, что планировался автором ещё FUSA_HD, но он видимо дальше бета-теста не ушел. Или есть какая инфа по этому вопросу?
GreeDi добавил 01.08.2014 в 18:45
Перелапатил все прошивки с 5.00 до 6.60 методом дизаса декриптованных prx'ов из прошивок. Ни в одной не нашел sceDisplay_driver_5B5AEFAD (все функции нет времени проверять). Смотрел как в 25_DISASM_ALL, так и отдельно в prx'ах display.prx. Похожие есть, но совпадения только этого уровня "sceDisplay_driver_5_____".
Последний раз редактировалось GreeDi; 01.08.2014 в 18:45.
Причина: добавил, подумав
Да, забыл добавить, что по ссылке из цитаты лежит архив pspsdk_doc.7z... (я исправил там множество ошибок синтаксиса HTML и XML_Viewer, а так же прикрутил его к PSPSDK)
GreeDi,
Так вот, содержимое этого архива необходимо разархивировать в папку C:\pspsdk\doc (соглашаясь на слияние папки и файлов)
Естесственно, чтобы этот путь существовал на диске С, до этого должен был быть установлен "Minimalist PSPSDK for Windows" (ссылка по теме)
Просмотр либдоков производится запускающим файлом "C:\pspsdk\doc\pspsdk.html" (последняя вкладка "PRX Libraries Documentation") через браузер Опера 12.17 (эта версия последняя на С++ и поддерживает просмотр XML-содержимого файлов доков.
Новые версии, на технологии Вебкит, не поддерживают просмотр и отображение XML, т.е. все xml-файлы отображаются в браузере пустой страницей)
Таким образом, ты сможешь просматривать НИДы функций в XML файлах прошивок, например 5.00, и будешь видеть названия функций и нидов в удобочитаемом виде, а так же, сможешь производить поиск прямо в браузере по CTRL+F.
Так же, рекомендую воспользоваться ссылкой из предыдущего поста на "Replace Studio Pro", чтобы за пару минут отыскать наличие НИДа в папке либдоков со всеми прошивками, т.е. произвести поиск глобально в папке, включая подпапки с кучей файлов.
Сообщение от GreeDi
3. Как по инструкции "Удаляем все лишние строки со статическими функциями, т.е. у которых нет в названии функции суффикса с 4-значным НИДом". Итого остались:
0xADF12745 [0x00000180] - syslib_ADF12745
0x159AF5CC [0x000026E8] - SystemCtrlForKernel_159AF5CC
0x737486F2 [0x000026F0] - scePower_driver_737486F2
0x5B5AEFAD [0x00002700] - sceDisplay_driver_5B5AEFAD
0x3A622550 [0x00002708] - sceCtrl_driver_3A622550
0xD8779AC6 [0x00002710] - LoadCoreForKernel_D8779AC6
0x237DBD4F [0x000027C0] - SysMemForKernel_237DBD4F
0xB6D61D02 [0x000027C8] - SysMemForKernel_B6D61D02
0x9D9A5BA1 [0x000027D0] - SysMemForKernel_9D9A5BA1
0x3FC9AE6A [0x000027D8] - SysMemForKernel_3FC9AE6A
Ну конечно проверь...
В архиве 3 файла: из сообщения выше "Портирования нидов" есть 2 пункта под вопросом и один пункт о прекращении экспорта функции LoadCoreForKernel_D8779AC6. Вот эти 3 вопросительных функции в коде:
0x737486F2 [0x000026F0] - scePower_driver_737486F2 => в 6.60 не изменился (0xEBD177D6 ???)
0x3A622550 [0x00002708] - sceCtrl_driver_3A622550 => в 6.60 не изменился (0x2BA616AF ???)
0xD8779AC6 [0x00002710] - LoadCoreForKernel_D8779AC6 => sceKernelIcacheClearAll not exported any more
Поэтому я портировал 3 вида плагина:
FuSa_SD_660a.prx - не включает изменений функций под вопросом.
FuSa_SD_660b.prx - включает изменения под вопросом
FuSa_SD_660c.prx - дополнительно к предыдущему изменению -> изменение функции LoadCoreForKernel_D8779AC6 на нехешированную функцию sceKernelIcacheClearAll