From 2138a835d23d344c8f247b7bf7917851858c8ad2 Mon Sep 17 00:00:00 2001 From: "AtelierWindows\\SilicaAndPina" Date: Mon, 15 Oct 2018 17:48:48 +1300 Subject: [PATCH] Add libarys --- CMakeLists.txt => app/CMakeLists.txt | 6 +- debugScreen.h => app/src/debugScreen.h | 0 .../src/debugScreenFont.c | 0 main.c => app/src/main.c | 0 np.h => app/src/np.h | 0 build.sh | 20 +++ kernel.skprx | Bin 2446 -> 0 bytes kernel/CMakeLists.txt | 44 ++++++ kernel/src/appmgr_kernel.h | 17 +++ kernel/src/main.c | 141 ++++++++++++++++++ user.suprx | Bin 1531 -> 0 bytes user/CMakeLists.txt | 39 +++++ user/src/appmgr_user.h | 3 + user/src/main.c | 36 +++++ 14 files changed, 303 insertions(+), 3 deletions(-) rename CMakeLists.txt => app/CMakeLists.txt (96%) rename debugScreen.h => app/src/debugScreen.h (100%) rename debugScreenFont.c => app/src/debugScreenFont.c (100%) rename main.c => app/src/main.c (100%) rename np.h => app/src/np.h (100%) create mode 100644 build.sh delete mode 100644 kernel.skprx create mode 100644 kernel/CMakeLists.txt create mode 100644 kernel/src/appmgr_kernel.h create mode 100644 kernel/src/main.c delete mode 100644 user.suprx create mode 100644 user/CMakeLists.txt create mode 100644 user/src/appmgr_user.h create mode 100644 user/src/main.c diff --git a/CMakeLists.txt b/app/CMakeLists.txt similarity index 96% rename from CMakeLists.txt rename to app/CMakeLists.txt index 4c06786..aebf209 100644 --- a/CMakeLists.txt +++ b/app/CMakeLists.txt @@ -8,12 +8,12 @@ if(NOT DEFINED CMAKE_TOOLCHAIN_FILE) endif() endif() -project(trophy_mount) +project(TrophaxSE) include("${VITASDK}/share/vita.cmake" REQUIRED) set(VITA_APP_NAME ${PROJECT_NAME}) -set(VITA_TITLEID "TROPMOUNT") +set(VITA_TITLEID "TROPHAXSE") set(VITA_VERSION "01.00") @@ -65,4 +65,4 @@ vita_create_vpk(${PROJECT_NAME}.vpk ${VITA_TITLEID} eboot.bin #FILE sce_sys/livearea/contents/bg.png sce_sys/livearea/contents/bg.png #FILE sce_sys/livearea/contents/startup.png sce_sys/livearea/contents/startup.png #FILE sce_sys/livearea/contents/template.xml sce_sys/livearea/contents/template.xml -) +) \ No newline at end of file diff --git a/debugScreen.h b/app/src/debugScreen.h similarity index 100% rename from debugScreen.h rename to app/src/debugScreen.h diff --git a/debugScreenFont.c b/app/src/debugScreenFont.c similarity index 100% rename from debugScreenFont.c rename to app/src/debugScreenFont.c diff --git a/main.c b/app/src/main.c similarity index 100% rename from main.c rename to app/src/main.c diff --git a/np.h b/app/src/np.h similarity index 100% rename from np.h rename to app/src/np.h diff --git a/build.sh b/build.sh new file mode 100644 index 0000000..0ca0eab --- /dev/null +++ b/build.sh @@ -0,0 +1,20 @@ +export VITASDK=/usr/local/vitasdk +export PATH=$VITASDK/bin:$PATH + + +cd kernel/ +cmake . +make install + + + +cd ../user/ +cmake . +make install + + +cd ../app/ +mv ../kernel/kernel.skprx kernel.skprx +mv ../user/user.suprx user.suprx +cmake . +make \ No newline at end of file diff --git a/kernel.skprx b/kernel.skprx deleted file mode 100644 index 012b4bdaf83eb0f9b03a00c0ceee95381982f73e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2446 zcmd^Adpy%?82`y-$+|gB!YLg^6S?KGaw)@(+>*8xbHAQMm}?ka+!BdHCpNYN_jve-hkl#*D>jfvt8k;u-%>o5 z6Gs`Fn+OPekA=P-;#LX(*8t$?xAlPVQ9yRRkMGom_kHI^>=y$7+#$>jIlXf8ew(;6 zx3G=kj5r=w3Z52DgIm8pjL6jgwy}yWeDwKQ5?POkTRf8w6_Eij6F&rxcDH| zJYhSfx2Ge{y1Km4r?=;<-AluL;*>!PCO!q3Cs=8>wmCed^PZ)1C({gBn4o&y`Mj3W zvB#3`hcZRqJ{%QktHbn}oy2^}kvDr-97x)}$=mJMqc_HPfjVsE}SQmY){$C^0rstF=I4+8Zijtr1tCL)v7PK7y1l z9jU?azf%8Eh)=W+Y45f#-~95qx&-7{1%)=dEM$k!MzrAp*_CtA0~Qs^Qaj0L6EmCF zvQYP5jV>c{8|XL5vL#U?7j81nv8JZ>s69cja0En-cTiWLM{1F21!)D04>Ip1p3m7T zb9xGCRf9V8k!1?%_VIjGol;aE)9}C-J+rM>AF+Hl*km9bb0=h`G0%Mo_jK~(%0wUh zHX`*F^hoc^vcvsb{?spMdU4oJ5%p8krFUMos4~+PP_^R05YkB3jr+55h|YPs3su~q z-6qCrDZe{U=$GzSap^2|CZneD)Iqdf1#{T{7Oi2|VdTYUjK3~oGTuNOJ7hF%3|3QT zCni=hu;tiP_4K+mlP-28k{YjXtz5E&sZgT@PhEzny&)Lp+$R)F7t?P0y`>1hgXybC zvwM0xN9bJFfV3=@;$(=CScYZMKtxq?i8#CMRDg4X)k+bhUQ^AW zSOT><7T4~R^I@^5zv*uVtp3E5mp6UilgF6quU;8mS}ReHpBmEP^!KMj2Z??(F+qA0 z!&N#Gl;0sYgi1NZGW1{-lAHJA3fmGoWy(bza$JXetUPA5cfl;XutRJbN)O?Q_GA&3 z_6`hrwi{*;<`NkyNs0am2k>Xd@eMjb_6(c?+grMAf;QLciL;f~BiQXF<}4}O_DM75 zk}o}MJU2lnVk@04{+`Rsj2xLBb|Jg4W+)-Y^`FXLkoasFpqEx#V$%*~LmwzdHKP8Y zJYORF!rE*v;M?_eCY4563~zP@_I0@TLjT2vip+Pd=y@${9o1J;V%z8GY;>&a+e%`h z^E4H4b*H9oi(U+NN0@y90@QphJ9P^z#(+eTyM3iV*J_EnHd_gI%*DAPB8r#JxQ?D% z%f^2_rfcwoU4~9->82@oE|nI+#ARG%1dL?)P(k}|HTAC`z*+LW^n6W zBA*JB;=yWrTCY0)wpm}uIsT-CoAb#QRd;&KenohTfzzY|1Plj@sKuLt#YBcv_Q%G= zDP@AIoKz*jVrD}j!3K2;O~b2Gku(_FA!`>CAFn$I361V6Tu8DjsVyV!RxYLmLgwSX z8b>}TvNXONC}lb3KHM`Ll{Y#zX6|-{8ZEa>s;^lVr{*IT9h?iJ8#BwFYc6-x&oAm0 zD^FFtKnFse6=wI8b*srx5PnId{NOB=CcVqsEytb(c?az-Z>~;URC#j7LMI^iitvh{ zoBB8rR*@?acJ0pHax@h. +*/ + + +#include +#include +#include +#include +#include + +#include +#include + +#include + +#include "appmgr_kernel.h" + +int module_get_export_func(SceUID pid, const char *modname, uint32_t libnid, uint32_t funcnid, uintptr_t *func); +int module_get_offset(SceUID pid, SceUID modid, int segidx, size_t offset, uintptr_t *addr); + +void *(* sceAppMgrFindProcessInfoByPid)(void *data, SceUID pid); +int (* sceAppMgrMountById)(SceUID pid, void *info, int id, const char *titleid, const char *path, const char *desired_mount_point, const void *klicensee, char *mount_point); +int (* _ksceKernelGetModuleInfo)(SceUID pid, SceUID modid, SceKernelModuleInfo *info); + +tai_module_info_t tai_info; + +int _sceAppMgrKernelMountById(SceAppMgrMountIdArgs *args) { + int res; + + res = module_get_export_func(KERNEL_PID, "SceKernelModulemgr", 0xC445FA63, 0xD269F915, (uintptr_t *)&_ksceKernelGetModuleInfo); + if (res < 0) + res = module_get_export_func(KERNEL_PID, "SceKernelModulemgr", 0x92C9FFC2, 0xDAA90093, (uintptr_t *)&_ksceKernelGetModuleInfo); + if (res < 0) + return res; + + // Module info + SceKernelModuleInfo mod_info; + mod_info.size = sizeof(SceKernelModuleInfo); + res = _ksceKernelGetModuleInfo(KERNEL_PID, tai_info.modid, &mod_info); + if (res < 0) + return res; + + uint32_t appmgr_data_addr = (uint32_t)mod_info.segments[1].vaddr; + + SceUID process_id = ksceKernelGetProcessId(); + + void *info = sceAppMgrFindProcessInfoByPid((void *)(appmgr_data_addr + 0x500), process_id); + if (!info) + return -1; + + char process_titleid[12]; + char path[256]; + char desired_mount_point[16]; + char mount_point[16]; + char klicensee[16]; + + memset(mount_point, 0, sizeof(mount_point)); + + if (args->process_titleid) + ksceKernelStrncpyUserToKernel(process_titleid, (uintptr_t)args->process_titleid, 11); + if (args->path) + ksceKernelStrncpyUserToKernel(path, (uintptr_t)args->path, 255); + if (args->desired_mount_point) + ksceKernelStrncpyUserToKernel(desired_mount_point, (uintptr_t)args->desired_mount_point, 15); + if (args->klicensee) + ksceKernelMemcpyUserToKernel(klicensee, (uintptr_t)args->klicensee, 0x10); + + res = sceAppMgrMountById(process_id, info + 0x580, args->id, args->process_titleid ? process_titleid : NULL, args->path ? path : NULL, + args->desired_mount_point ? desired_mount_point : NULL, args->klicensee ? klicensee : NULL, mount_point); + + if (args->mount_point) + ksceKernelStrncpyKernelToUser((uintptr_t)args->mount_point, mount_point, 15); + + return res; +} + +int sceAppMgrKernelMountById(SceAppMgrMountIdArgs *args) { + uint32_t state; + ENTER_SYSCALL(state); + + SceAppMgrMountIdArgs k_args; + ksceKernelMemcpyUserToKernel(&k_args, (uintptr_t)args, sizeof(SceAppMgrMountIdArgs)); + + int res = ksceKernelRunWithStack(0x2000, (void *)_sceAppMgrKernelMountById, &k_args); + + EXIT_SYSCALL(state); + return res; +} + + +void _start() __attribute__ ((weak, alias("module_start"))); +int module_start(SceSize args, void *argp) { + + + + // Get tai module info + + tai_info.size = sizeof(tai_module_info_t); + if (taiGetModuleInfoForKernel(KERNEL_PID, "SceAppMgr", &tai_info) < 0) + return SCE_KERNEL_START_SUCCESS; + + switch (tai_info.module_nid) { + case 0xDBB29DB7: // 3.60 retail + module_get_offset(KERNEL_PID, tai_info.modid, 0, 0x2DE1, (uintptr_t *)&sceAppMgrFindProcessInfoByPid); + module_get_offset(KERNEL_PID, tai_info.modid, 0, 0x19B51, (uintptr_t *)&sceAppMgrMountById); + break; + + case 0x1C9879D6: // 3.65 retail + module_get_offset(KERNEL_PID, tai_info.modid, 0, 0x2DE1, (uintptr_t *)&sceAppMgrFindProcessInfoByPid); + module_get_offset(KERNEL_PID, tai_info.modid, 0, 0x19E61, (uintptr_t *)&sceAppMgrMountById); + break; + + case 0x54E2E984: // 3.67 retail + module_get_offset(KERNEL_PID, tai_info.modid, 0, 0x2DE1, (uintptr_t *)&sceAppMgrFindProcessInfoByPid); + module_get_offset(KERNEL_PID, tai_info.modid, 0, 0x19E6D, (uintptr_t *)&sceAppMgrMountById); + break; + } + + + return SCE_KERNEL_START_SUCCESS; +} + +int module_stop(SceSize args, void *argp) { + + return SCE_KERNEL_STOP_SUCCESS; +} diff --git a/user.suprx b/user.suprx deleted file mode 100644 index 7a1444c0ba75a22fed51a56a01c0aed48de64caf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1531 zcmWG`c4c5@U|=}Fz{tSB24n~TF%YzI0{KAjn-xsK2^J`;0ZK1`(hs0CjB(%>YE6dofzT-bpLA%KdBq2kut z^M>9|ffC0)exJp)RmEh>QB|osLd6*wD->lnO<1z5ZH)>O=T6fnLDv^XsVrJ_bDxum z%jDXI1^XO>1YDdK3xvGinU&?|tNVYx&GVvn)fG17`BswKb-ZW&nV)F5yF**(^7Fue z@;c5VN2bYfo^JT!`MTt8doH(QR(USBzPpWCaZ-knkV__su@yS2*+mMw_%;Q{*! z{r1`%G7%5`Sa_nxuYYOZ`RG2*0tI@FePa7 zTFooRvfj2cS-mgay z5mvU9>qPV1+KTnX<$pfAt2ArUvd7VrrM3NzY0jAU^US)`ozKoK+kJI^ef5X5eK$2; ze%^7T_WAsCGuLdMdDeCI*6!k`&e7KU8TnHD#Vc-sN@E7bid)GENeKxVDG56+GAwD# zVO03dH|6XthKJ2J<~VHQn3Bto;_YzL)?pjZl(h^?_B(uyVz_C)AV*r^H~*BgH$ci% l9jsW=_$Kr$ueUmuYeu1I5RW<2_6MDhOL~E#sILG-r)cM diff --git a/user/CMakeLists.txt b/user/CMakeLists.txt new file mode 100644 index 0000000..21a2e76 --- /dev/null +++ b/user/CMakeLists.txt @@ -0,0 +1,39 @@ +cmake_minimum_required(VERSION 2.8) + +if(NOT DEFINED CMAKE_TOOLCHAIN_FILE) + if(DEFINED ENV{VITASDK}) + set(CMAKE_TOOLCHAIN_FILE "$ENV{VITASDK}/share/vita.toolchain.cmake" CACHE PATH "toolchain file") + else() + message(FATAL_ERROR "Please define VITASDK to point to your SDK path!") + endif() +endif() + +project(SceAppMgrUser) +include("${VITASDK}/share/vita.cmake" REQUIRED) + +set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wl,-q -Wall -O3 -nostdlib") +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-rtti -fno-exceptions") + +add_executable(${PROJECT_NAME} + src/main.c +) + +target_link_libraries(${PROJECT_NAME} + SceLibKernel_stub + SceIofilemgr_stub + SceAppMgrKernel2_stub +) + +vita_create_self(user.suprx ${PROJECT_NAME} CONFIG exports.yml UNSAFE) + +vita_create_stubs(stubs ${PROJECT_NAME} ${CMAKE_SOURCE_DIR}/exports.yml) + +install(DIRECTORY ${CMAKE_BINARY_DIR}/stubs/ + DESTINATION lib + FILES_MATCHING PATTERN "*.a" +) + +install(FILES src/appmgr_user.h + DESTINATION include +) + diff --git a/user/src/appmgr_user.h b/user/src/appmgr_user.h new file mode 100644 index 0000000..7f9b9bc --- /dev/null +++ b/user/src/appmgr_user.h @@ -0,0 +1,3 @@ +#include + +int sceAppMgrUserMountById(SceAppMgrMountIdArgs *args); diff --git a/user/src/main.c b/user/src/main.c new file mode 100644 index 0000000..b442748 --- /dev/null +++ b/user/src/main.c @@ -0,0 +1,36 @@ +/* + VitaShell + Copyright (C) 2015-2016, TheFloW + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + + +#include +#include "appmgr_user.h" + + +int sceAppMgrUserMountById(SceAppMgrMountIdArgs *args) { + return sceAppMgrKernelMountById(args); +} + + +void _start() __attribute__ ((weak, alias("module_start"))); +int module_start(SceSize args, void *argp) { + return SCE_KERNEL_START_SUCCESS; +} + +int module_stop(SceSize args, void *argp) { + return SCE_KERNEL_STOP_SUCCESS; +}