2012 11 02
libmenu 1.6のDLリンクが切れていたようなので
ファイルを別の場所へアップロードし直しました。
http://magicsave.blog25.fc2.com/blog-entry-50.html
ファイルを別の場所へアップロードし直しました。
http://magicsave.blog25.fc2.com/blog-entry-50.html
スポンサーサイト
MagicSave Ver 3.63 リリース
2012 11 01
MagicSave Ver 3.63 リリース
しばらくPSPから離れていた為、更新がかなり遅れましたが、
今さらながらCFW 6.60に対応しました。
続2 > MagicSaveがCFW 6.60で動作しない件について
2012 10 30
続1 > MagicSaveがCFW 6.60で動作しない件について
この件はあれから解決出来たので、
このまま問題がなければ遅くても今週中には
CFW 6.60対応 MagicSaveをリリースします。
この件はあれから解決出来たので、
このまま問題がなければ遅くても今週中には
CFW 6.60対応 MagicSaveをリリースします。
続1 > MagicSaveがCFW 6.60で動作しない件について
2012 10 29
MagicSave include/hook.c hookFindSyscallAddr関数 参照
構造体の変更によりsyscallテーブル取得がうまく出来なくなっている!?らしい。
もしくはCFW側によってプラグイン起動前にsyscall置き換えがされてしまっている。
別方法による関数フックが必要でsceChnnlsv関係のはどうにかなるかもしれないけど
sceIoReadのフックがどうも上手くいかない。
sceIoReadを含むFW6.60のiofilemgr.prxをprxtoolで
disassembleして見ると以下のようになっている。
うーん、間違いや別の打開法などなどあれば情報を
sceKernelQuerySystemCallを使う方法もあるけれど
それは戻り値が-1でダメなようだ。
FW6.60でのsceKernelQuerySystemCallは以下のmodname、libname、nid
asm( "cfc0 %0, $12;" : "=r"( cop0_ctrl_register_12 ) );MagicSaveが動かない原因はここにあって
構造体の変更によりsyscallテーブル取得がうまく出来なくなっている!?らしい。
もしくはCFW側によってプラグイン起動前にsyscall置き換えがされてしまっている。
別方法による関数フックが必要でsceChnnlsv関係のはどうにかなるかもしれないけど
sceIoReadのフックがどうも上手くいかない。
sceIoReadを含むFW6.60のiofilemgr.prxをprxtoolで
disassembleして見ると以下のようになっている。
; Subroutine IoFileMgrForUser_6A638D83 - Address 0x000040E0 - Aliases: IoFileMgrForKernel_6A638D83 ; Exported in IoFileMgrForUser ; Exported in IoFileMgrForKernel IoFileMgrForUser_6A638D83: ; Refs: 0x00000638 0x000040E0: 0x27BDFFF0 '...'' - addiu $sp, $sp, -16 0x000040E4: 0xAFBF0000 '....' - sw $ra, 0($sp) 0x000040E8: 0x0C00134F 'O...' - jal sub_00004D3C 0x000040EC: 0x00003821 '!8..' - move $a3, $zr 0x000040F0: 0x8FBF0000 '....' - lw $ra, 0($sp) 0x000040F4: 0x03E00008 '....' - jr $ra 0x000040F8: 0x27BD0010 '...'' - addiu $sp, $sp, 16そこで
#define MAKE_CALL(a, f) _sw(0x0C000000 | (((u32)(f) >> 2) & 0x03FFFFFF), a); typedef struct SceModule2 { struct SceModule2 *next; unsigned short attribute; unsigned char version[2]; char modname[27]; char terminal; unsigned int unknown1; unsigned int unknown2; SceUID modid; unsigned int unknown3[2]; u32 mpid_text; // 0x38 u32 mpid_data; // 0x3C void * ent_top; unsigned int ent_size; void * stub_top; unsigned int stub_size; unsigned int unknown4[5]; unsigned int entry_addr; unsigned int gp_value; unsigned int text_addr; unsigned int text_size; unsigned int data_size; unsigned int bss_size; unsigned int nsegment; unsigned int segmentaddr[4]; unsigned int segmentsize[4]; } SceModule2; int (*_sceIoRead)(SceUID , void *, SceSize ) = NULL; int hk_sceIoRead(SceUID fd, void *data, SceSize size) { int k1 = pspSdkSetK1( 0 ); int ret = _sceIoRead(fd,data,size); pspSdkSetK1( k1 ); return ret; } void ClearCaches(void) { sceKernelDcacheWritebackAll(); sceKernelIcacheClearAll(); } void hook() { SceModule2 *module = (SceModule2 *)sceKernelFindModuleByName( "sceIOFileManager" ); u32 tex_addr; if( module ) { _sceIoRead = (void*)(module->text_addr + 0x4D3C); text_addr = (u32)(module->text_addr + 0x40E8); MAKE_CALL(text_addr, hk_sceIoRead); ClearCaches(); } }このように一般的な方法でフックしてみても瞬時にフリーズ
うーん、間違いや別の打開法などなどあれば情報を
sceKernelQuerySystemCallを使う方法もあるけれど
それは戻り値が-1でダメなようだ。
FW6.60でのsceKernelQuerySystemCallは以下のmodname、libname、nid
sceInterruptManager、InterruptManagerForKernel,0xF153B371
MagicSaveがCFW 6.60で動作しない件について
2012 10 24
お久しぶりです、しばらくPSPから離れていたため更新が遅れました。
MagicSaveを動作させる為に必要な関数へのHookが
CFW 6.60では何らかの原因により既存の方法では正常に行われていない模様
その為、現在は動作不可になっていました。
断言は出来ませんが別の方法で対処可能だと思われるので
しばらくお待ちください。
MagicSaveを動作させる為に必要な関数へのHookが
CFW 6.60では何らかの原因により既存の方法では正常に行われていない模様
その為、現在は動作不可になっていました。
断言は出来ませんが別の方法で対処可能だと思われるので
しばらくお待ちください。