From a434c0fb18e05fa703221bee54670dbc9d1b3db4 Mon Sep 17 00:00:00 2001 From: "gid15@web.de" Date: Fri, 13 Jan 2017 22:03:59 +0100 Subject: [PATCH] Improvements of JpcspTrace: - allow JpcspTrace to be enabled in the VSH - added logging of "IN" and "OUT" prefix when using the "!" parameter option - added new parameters types for pspNetSockAddrInternet and videocodec --- ms0/JpcspTrace/JpcspTrace.prx | Bin 20746 -> 22710 bytes ms0/JpcspTrace/JpcspTraceUser.prx | Bin 13586 -> 15418 bytes ms0/JpcspTrace/README.txt | 4 + ms0/JpcspTrace/common.c | 205 ++++++++++++++++++++++++++---- ms0/JpcspTrace/common.h | 23 ++-- ms0/JpcspTrace/main.c | 20 ++- ms0/JpcspTrace/prx/user.c | 21 ++- 7 files changed, 237 insertions(+), 36 deletions(-) diff --git a/ms0/JpcspTrace/JpcspTrace.prx b/ms0/JpcspTrace/JpcspTrace.prx index 09c508e28d5d78565658844f6f45cad5ff4c24c4..5015609ad756801b3918e52f6bacd253a5d66e9f 100644 GIT binary patch literal 22710 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 literal 20746 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 diff --git a/ms0/JpcspTrace/JpcspTraceUser.prx b/ms0/JpcspTrace/JpcspTraceUser.prx index b2ac304cc4d800f48ec620a417f6aa5e8dda7ad8..68198362577f9f63330841d92ca17f96e80ee1ff 100644 GIT binary patch literal 15418 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

;r$1-<=DG2L9Twh;oxQUs>Dt}+&K7as z3lyvcYkm0~^m8o>_-1c~wft&6edn3xQ@HD){5G^3X@a(gC+P$3(6;*XfMc49II6ZAI)8Kz&(oLTD)58vcPL+i~xte%&V z-{#rZ;3cl&ErMRs9Ag{kU-&8P*yQ=G_{{?Mo88tIaMt2j`ViV@p&vqsqZc|+3ZpO3 z|C4MN;W-;FXArnr&uq4Qmob9b$3L<&tlv>8VBY{AtdQIK6Wra**{FlxMt+JGw3XdN1Ae(Xk^FV-nYiFC)BpXY6aF#&{Jr93 zGshUe(*@b&;XV-yyxk5R#Opd|*8J`<&Z~eFfv0uE;tQ>my~??nFobJbAO3A6_YMlpXO} z?IP~NUM`1m?y}_74cylT{+|&0+zK10uA3L~f-$36( zj}PrSI8<-#(a#S*)VH6UwFMphLw#Mn4|N@=W54ssmw*1sgRw83&VAjU4qwi$|HW4( zQ*XTEmmh!e$t_R)(bxX^;r_q7ZM99#J>C<7IQ08n1BXCiAK)Au%HP`(|stPKX@RAO2d7W(IT|J+54h?rb-bZtCKmPAHnC}|cHPqLK9`j@KP}fKuoqq4V z?`yg5{U2!k;777M+IH?@J)?i%;N#8t5iFyKPXfR34EU|s z)fV37Q`A8@=J`gvq^Xa37V);@J9q+paNEdX0hSApX}!bOakX4iogC+#4CK(nl_$`5 zA2^jd|4w12NPqY=;0^rC;+y`_F6Xe_*RlKYIytt1b5~#sMJwN*s*~e<*a5j51@sB( zJPx{2=ieOs>r|N=fPsI9@E!Qax%K#U?0%_Ej=s&{^}q|BAVz-)My1ZK^FF~}+4v6+ zGJ)Nb_zvurp=%MZNlcXu+VMlsl{$Ux(C4Vk+kt_;f5vy9k84yf-lWPA0)78lCzpcE z7~XTNs81mG2Ixwi-G12JqcR+Gfn5uAS)C_>B?tZCUfV7_MvR+xS5l)hB0aAYkNco)79ZK&} zdau&>>D>NndRlQ#`DcKXKd1D0r7tR822#(WmM)7Vq6-WV1q;u848ImKll^)=q;w==Ies(4hf2xPqpAmxuMJ*D)t(lbh* z1~RS}6fY?*DmK9%mbWUlDdrUCAxC>1plNTf@&^>liWjwgM^)~a^5fuBf1{Qs6dfS- zC6!Jo-2|k(r~EeMw=2Ixu~%^bNdE?b)R$L2_i)rxR-9Fw0aE@Hkn(d%pHccOko7Jo zUQ+DD1pw<^R=FkRF9XTPADJ0_5g_ZwfaIr?pH_ZFaZ1alwR}eDS*7QI)N@w(^U6Q3 z{ELc9ikE@3cLm6HEh|RgH}%97W7>`ckaCTRxP&xvEs9M*>TA{VjAEOX_bc`SDL0_y zgNh?sKBhRKcoazaV?f%UQvQt6vr3-^Qf^N9XO(|k+c~fN^U7ZYQhrJK%gRq+!@>6B z^4DNm5kKY_x?ORPVlR+-`hoN>ul&QxA60%)`A3z1O!>!^Kdt;3<>-%%HOT@W!0BcdXM5>pcyY}zgPJK z${$raw#k=EC?*xtiW$Xr#RO24M`43K&*EB}hp3Ea|A@3PX3O5;a6Bkw4k1k&$4iv5at#Zkqw z;xWb76fY?*DatLrzE;I{#SX0ZSt<<9~sKd*RE@rq*dHf<-6b~8ZQ-J|?o#ZfJ9Qyc?Q z?wFRJQk+-B52Qw43`n^Ykba~UJ;ip#J&K1F%Ze4nQ;O#lUsJrI7{xsf^*1WED0+%H z#a_h`#iC+GaaQr1Vhnd6)SFUlRcu$>qsY4w%JJTW$U77w{;0*^B_Otb=8lsnI1dve zic!V5VnVS|F{Rj~m{#Qd1@(A}gNk{@5yiub1;vUY?*mwWN^x58EG|^YKc_gacwX^> z;%kZviWe0xDPC4wR9td=z2f>9QH(0a6s0-ehnu|Sp}qnA!Y%Kk`9s}G4eaY~?mLig z#+9oyE8$D85P?W{e!nj=Y^nzpNUhfJDONF3rq0koUSc-GFfLhf!TYfTj~(=DT&HA3 z{*k`neZ6q+YUw)uitNMtdLd@WdU0u{ai8OV4R;R@OSAcJxPLf5l<(?B2g!c|name, ": ", stackUsage, "\n"); } -void syscallLog(const SyscallInfo *syscallInfo, const u32 *parameters, u64 result, u32 ra, u32 sp, u32 gp) { - char buffer[200]; + +void syscallLog(const SyscallInfo *syscallInfo, int inOut, const u32 *parameters, u64 result, u32 ra, u32 sp, u32 gp) { + char buffer[250]; char *s = buffer; int i; int length; + int videocodec = 0; + int videocodecType = -1; // Don't log our own sceIoWrite and sceIoClose if ((syscallInfo->nid == NID_sceIoWrite || IS_sceIoClose_NID(syscallInfo->nid)) && parameters[0] == commonInfo->logFd) { @@ -638,6 +650,12 @@ void syscallLog(const SyscallInfo *syscallInfo, const u32 *parameters, u64 resul *s++ = ' '; } + if (inOut < 0) { + s = append(s, "IN "); + } else if (inOut > 0) { + s = append(s, "OUT "); + } + if (logRa) { s = appendHex(s, ra, 0); *s++ = ' '; @@ -703,21 +721,164 @@ void syscallLog(const SyscallInfo *syscallInfo, const u32 *parameters, u64 resul s = syscallLogMem(buffer, s, parameter, 24); break; case TYPE_MP4_TRACK: - s = syscallLogMem(buffer, s, parameter, 240); + s = syscallLogMem(buffer, s, parameter, 384); + break; + case TYPE_SOCK_ADDR_INTERNET: + // the address is not 32-bit aligned + s = appendHex(s, parameter, 8); + if (parameter != 0) { + *s++ = '('; + s = append(s, "len="); + s = appendInt(s, _lb(parameter), 0); + s = append(s, ", family="); + s = appendInt(s, _lb(parameter + 1), 0); + s = append(s, ", port="); + s = appendInt(s, (_lb(parameter + 2) << 8) | _lb(parameter + 3), 0); + s = append(s, ", addr="); + s = appendInt(s, _lb(parameter + 4), 0); + s = append(s, "."); + s = appendInt(s, _lb(parameter + 5), 0); + s = append(s, "."); + s = appendInt(s, _lb(parameter + 6), 0); + s = append(s, "."); + s = appendInt(s, _lb(parameter + 7), 0); + *s++ = ')'; + } +#if 0 +// sceNetInetConnect on port 80 ? +if (syscallInfo->nid == 0x410B34AA && _lb(parameter + 2) == 0 && _lb(parameter + 3) == 80) { + _sb(192, parameter + 4); + _sb(168, parameter + 5); + _sb( 1, parameter + 6); + _sb( 3, parameter + 7); +} +#endif + break; + case TYPE_BUFFER_AND_LENGTH: + if (i + 1 < syscallInfo->numParams) { + s = syscallLogMem(buffer, s, parameter, parameters[i + 1]); + } + break; + case TYPE_VIDEOCODEC: + s = appendHex(s, parameter, 8); + videocodec = parameter; + if (i + 1 < syscallInfo->numParams) { + videocodecType = parameters[i + 1]; + } break; } } - *s++ = ' '; - *s++ = '='; - *s++ = ' '; - s = appendHex(s, (int) result, 0); + + // Do not log the result at "IN" when logging before and after the syscall + if (inOut >= 0) { + *s++ = ' '; + *s++ = '='; + *s++ = ' '; + s = appendHex(s, (int) result, 0); + } #if DEBUG_MUTEX s = mutexLog(s, syscallInfo, parameters, result); #endif - *s++ = '\n'; - writeLog(buffer, s - buffer); + s = flushBuffer(buffer, s); + +#if DUMP_sceMpegBaseCscAvc_CALLS + if (syscallInfo->nid == NID_sceMpegBaseCscAvc) { + char *fileName = buffer; + s = append(buffer, "ms0:/tmp/sceMpegBaseCscAvc."); + s = appendInt(s, sceMpegBaseCscAvcCall, 0); + SceUID fd = ioOpen(fileName, PSP_O_WRONLY | PSP_O_CREAT, 0777); + if (fd >= 0) { + int bufferWidth = parameters[2]; + int height = _lw(parameters[3] + 0); + int size = (bufferWidth * (height << 4)) << 2; + int addr = parameters[0] | 0x40000000; // Uncached video memory + while (size > 0) { + int length = commonInfo->maxLogBufferLength; + if (length > size) { + length = size; + } + memcpy(commonInfo->logBuffer, (void *) addr, length); + length = ioWrite(fd, commonInfo->logBuffer, length); + if (length <= 0) { + break; + } + size -= length; + addr += length; + } + ioClose(fd); + } + s = flushBuffer(buffer, s); + sceMpegBaseCscAvcCall++; + } +#endif + + if (videocodec != 0) { + s = syscallLogMem(buffer, s, videocodec, 96); + s = flushBuffer(buffer, s); + + int buffer2 = _lw(videocodec + 16); + if (buffer2 != 0) { + s = append(s, "Buffer2 Offset 16 "); + s = syscallLogMem(buffer, s, buffer2, 40); + s = flushBuffer(buffer, s); + } + + if (videocodecType == 0) { + int yuv = _lw(videocodec + 44); + if (yuv != 0) { + s = append(s, "Yuv Offset 44 "); + s = syscallLogMem(buffer, s, yuv, 44); + s = flushBuffer(buffer, s); + +#if DUMP_VIDEOCODEC_FRAMES + // Has video frame? + if (syscallInfo->nid == NID_sceVideocodecDecode && _lw(yuv + 32)) { + char *fileName = buffer; + s = append(buffer, "ms0:/tmp/videocodecFrame."); + s = appendInt(s, videocodecFrame, 0); + SceUID fd = ioOpen(fileName, PSP_O_WRONLY | PSP_O_CREAT, 0777); + if (fd >= 0) { + int size = _lw(yuv + 28) + (_lw(yuv + 28) - _lw(yuv + 20)) - _lw(yuv + 0); + ioWrite(fd, (void *) (_lw(yuv + 0) | 0x80000000), size); + ioClose(fd); + } + s = buffer; + videocodecFrame++; + } +#endif + + int buffer1 = _lw(yuv + 36); + if (buffer1 != 0) { + s = append(s, "Yuv.buffer1 Offset 36 "); + s = syscallLogMem(buffer, s, buffer1, 36); + s = flushBuffer(buffer, s); + } + + int buffer2 = _lw(yuv + 40); + if (buffer2 != 0) { + s = append(s, "Yuv.buffer2 Offset 40 "); + s = syscallLogMem(buffer, s, buffer2, 32); + s = flushBuffer(buffer, s); + } + } + + int buffer3 = _lw(videocodec + 48); + if (buffer3 != 0) { + s = append(s, "Buffer3 Offset 48 "); + s = syscallLogMem(buffer, s, buffer3, 40); + s = flushBuffer(buffer, s); + } + + int decodeSEI = _lw(videocodec + 80); + if (decodeSEI != 0) { + s = append(s, "DecodeSEI Offset 80 "); + s = syscallLogMem(buffer, s, decodeSEI, 36); + s = flushBuffer(buffer, s); + } + } + } #if DEBUG_UTILITY_SAVEDATA utilitySavedataLog(buffer, syscallInfo, parameters[0]); diff --git a/ms0/JpcspTrace/common.h b/ms0/JpcspTrace/common.h index 93d332ba8..14ee500f2 100644 --- a/ms0/JpcspTrace/common.h +++ b/ms0/JpcspTrace/common.h @@ -21,20 +21,25 @@ along with Jpcsp. If not, see . #define DEBUG_UTILITY_OSK 1 #define DEBUG_UTILITY_MSG 1 #define DEFAULT_LOG_BUFFER_SIZE 8*1024 +#define DUMP_VIDEOCODEC_FRAMES 0 +#define DUMP_sceMpegBaseCscAvc_CALLS 0 #define ALIGN_UP(n, alignment) (((n) + ((alignment) - 1)) & ~((alignment) - 1)) #define TYPE_HEX32 0 #define TYPE_INT32 1 #define TYPE_STRING 2 -#define TYPE_POINTER32 3 -#define TYPE_POINTER64 4 -#define TYPE_VARSTRUCT 5 -#define TYPE_FONT_INFO 6 +#define TYPE_POINTER32 3 +#define TYPE_POINTER64 4 +#define TYPE_VARSTRUCT 5 +#define TYPE_FONT_INFO 6 #define TYPE_FONT_CHAR_INFO 7 -#define TYPE_MPEG_EP 8 -#define TYPE_MPEG_AU 9 -#define TYPE_MP4_TRACK 10 +#define TYPE_MPEG_EP 8 +#define TYPE_MPEG_AU 9 +#define TYPE_MP4_TRACK 10 +#define TYPE_SOCK_ADDR_INTERNET 11 +#define TYPE_BUFFER_AND_LENGTH 12 +#define TYPE_VIDEOCODEC 13 #define FLAG_LOG_BEFORE_CALL (1 << 0) #define FLAG_LOG_AFTER_CALL (1 << 1) @@ -46,6 +51,8 @@ along with Jpcsp. If not, see . #define NID_sceIoClose 0x810C4BC3 #define NID_sceIoOpen_stargate 0x7C8EFE7D #define NID_sceIoClose_stargate 0x747A373E +#define NID_sceVideocodecDecode 0xDBA273FA +#define NID_sceMpegBaseCscAvc 0x91929A21 #define IS_sceIoOpen_NID(nid) ((nid) == NID_sceIoOpen || (nid) == NID_sceIoOpen_stargate) #define IS_sceIoClose_NID(nid) ((nid) == NID_sceIoClose || (nid) == NID_sceIoClose_stargate) @@ -96,7 +103,7 @@ void printLogSH(const char *s1, const char *s2, const char *s3, int hex, const c void printLogHS(const char *s1, int hex, const char *s2, const char *s3, const char *s4); void printLogSS(const char *s1, const char *s2, const char *s3, const char *s4, const char *s5); void printLogMem(const char *s1, int addr, int length); -void syscallLog(const SyscallInfo *syscallInfo, const u32 *parameters, u64 result, u32 ra, u32 sp, u32 gp); +void syscallLog(const SyscallInfo *syscallInfo, int inOut, const u32 *parameters, u64 result, u32 ra, u32 sp, u32 gp); int userIoOpen(const char *s, int flags, int permissions); int userIoWrite(SceUID id, const void *data, int size); int userIoClose(SceUID id); diff --git a/ms0/JpcspTrace/main.c b/ms0/JpcspTrace/main.c index 8636285eb..9d2805e03 100644 --- a/ms0/JpcspTrace/main.c +++ b/ms0/JpcspTrace/main.c @@ -172,6 +172,9 @@ u32 parseParamTypes(const char *s, u32 *pflags) { case 'e': paramType = TYPE_MPEG_EP; break; case 'a': paramType = TYPE_MPEG_AU; break; case 't': paramType = TYPE_MP4_TRACK; break; + case 'I': paramType = TYPE_SOCK_ADDR_INTERNET; break; + case 'B': paramType = TYPE_BUFFER_AND_LENGTH; break; + case 'V': paramType = TYPE_VIDEOCODEC; break; } paramTypes |= paramType << i; i += 4; @@ -239,10 +242,11 @@ void mutexPreLog(const SyscallInfo *syscallInfo, const u32 *parameters) { } #endif -u64 syscallPlugin(u32 a0, u32 a1, u32 a2, u32 a3, u32 t0, u32 t1, u32 t2, u32 t3, SyscallInfo *syscallInfo, u32 ra, u32 sp, u32 gp) { +u64 syscallPlugin(u32 a0, u32 a1, u32 a2, u32 a3, u32 t0, u32 t1, u32 t2, u32 t3, SyscallInfo *syscallInfo, u32 ra, u32 sp, u32 gp, u32 dummy0, u32 dummy4, u32 dummy8, u32 realRa) { u32 parameters[8]; int k1; u64 result; + int inOut = 0; parameters[0] = a0; parameters[1] = a1; @@ -266,9 +270,15 @@ u64 syscallPlugin(u32 a0, u32 a1, u32 a2, u32 a3, u32 t0, u32 t1, u32 t2, u32 t3 #endif if (syscallInfo->flags & FLAG_LOG_BEFORE_CALL) { + if (syscallInfo->flags & FLAG_LOG_AFTER_CALL) { + // Display "IN" and "OUT" in front of syscall + // when it is logged both before and after. + inOut = 1; + } + commonInfo->inWriteLog++; k1 = pspSdkSetK1(0); - syscallLog(syscallInfo, parameters, 0, ra, sp, gp); + syscallLog(syscallInfo, -inOut, parameters, 0, realRa, sp, gp); pspSdkSetK1(k1); commonInfo->inWriteLog--; } @@ -278,7 +288,7 @@ u64 syscallPlugin(u32 a0, u32 a1, u32 a2, u32 a3, u32 t0, u32 t1, u32 t2, u32 t3 if (syscallInfo->flags & FLAG_LOG_AFTER_CALL) { k1 = pspSdkSetK1(0); - syscallLog(syscallInfo, parameters, result, ra, sp, gp); + syscallLog(syscallInfo, inOut, parameters, result, realRa, sp, gp); pspSdkSetK1(k1); } @@ -796,7 +806,9 @@ int module_start(SceSize args, void * argp) { printLog("JpcspTrace - module_start\n"); int initKeyConfig = sceKernelInitKeyConfig(); - if (initKeyConfig != PSP_INIT_KEYCONFIG_GAME) { + if (initKeyConfig == PSP_INIT_KEYCONFIG_VSH) { + printLog("JpcspTrace enabled for VSH\n"); + } else if (initKeyConfig != PSP_INIT_KEYCONFIG_GAME) { printLogH("sceKernelInitKeyConfig returned ", initKeyConfig, "\n"); return 1; } diff --git a/ms0/JpcspTrace/prx/user.c b/ms0/JpcspTrace/prx/user.c index 5f983f79f..6d70a3bef 100644 --- a/ms0/JpcspTrace/prx/user.c +++ b/ms0/JpcspTrace/prx/user.c @@ -29,6 +29,17 @@ PSP_MODULE_INFO("JpcspTraceUser", PSP_MODULE_USER, 1, 0); u64 syscallPlugin(u32 a0, u32 a1, u32 a2, u32 a3, u32 t0, u32 t1, u32 t2, u32 t3, SyscallInfo *syscallInfo, u32 ra, u32 sp, u32 gp) { u32 parameters[8]; u64 result; + int inOut = 0; + +#if 0 +if (syscallInfo->nid == 0x8EEFD953 && a3 == 443) { + a2 = (u32) "http"; + a3 = 80; +} else if (syscallInfo->nid == 0xCDF8ECB9 && strncmp((char *) a1, "https", 5) == 0) { + // Replace https with http + strcpy((char *) a1 + 4, (char *) a1 + 5); +} +#endif parameters[0] = a0; parameters[1] = a1; @@ -46,7 +57,13 @@ u64 syscallPlugin(u32 a0, u32 a1, u32 a2, u32 a3, u32 t0, u32 t1, u32 t2, u32 t3 #endif if (syscallInfo->flags & FLAG_LOG_BEFORE_CALL) { - syscallLog(syscallInfo, parameters, 0, ra, sp, gp); + if (syscallInfo->flags & FLAG_LOG_AFTER_CALL) { + // Display "IN" and "OUT" in front of syscall + // when it is logged both before and after. + inOut = 1; + } + + syscallLog(syscallInfo, -inOut, parameters, 0, ra, sp, gp); } if (syscallInfo->flags & FLAG_LOG_STACK_USAGE) { @@ -61,7 +78,7 @@ u64 syscallPlugin(u32 a0, u32 a1, u32 a2, u32 a3, u32 t0, u32 t1, u32 t2, u32 t3 } if (syscallInfo->flags & FLAG_LOG_AFTER_CALL) { - syscallLog(syscallInfo, parameters, result, ra, sp, gp); + syscallLog(syscallInfo, inOut, parameters, result, ra, sp, gp); } return result;