diff options
author | Princess of Sleeping | 2019-07-02 23:13:33 +0900 |
---|---|---|
committer | Sunguk Lee | 2019-07-02 23:13:33 +0900 |
commit | ec1104e3803ede69f1d21663b412e8e9d472f8f5 (patch) | |
tree | 9522d591f94031a4dfd67ae75a1da66c8c1b450c /include/kernel | |
parent | psp2: Add sceKernelUnlockLwMutex2 (diff) | |
download | vds-libraries-ec1104e3803ede69f1d21663b412e8e9d472f8f5.tar.gz |
Fix wrong ksceKernelGetModuleList2 (#373)
* Fix wrong ksceKernelGetModuleList2
* Update modulemgr.h
* Update modulemgr.h
* change the formatting
Diffstat (limited to 'include/kernel')
-rw-r--r-- | include/kernel/kernel/modulemgr.h | 87 |
1 files changed, 56 insertions, 31 deletions
diff --git a/include/kernel/kernel/modulemgr.h b/include/kernel/kernel/modulemgr.h index b5e84bc..9b8d9ff 100644 --- a/include/kernel/kernel/modulemgr.h +++ b/include/kernel/kernel/modulemgr.h @@ -72,37 +72,48 @@ typedef struct SceUInt unk_24; } SceKernelFwInfo; -typedef struct -{ - SceSize size; //!< sizeof(SceKernelLoadedModuleInfo) +typedef struct { + SceSize size; //!< sizeof(SceKernelSegmentInfo2) (0x14) + int perm; + void *vaddr; + uint32_t memsz; + int unk_10; +}SceKernelSegmentInfo2; + +typedef struct { + SceSize size; SceUID modid; uint32_t version; - uint32_t unkC; + uint32_t module_version; uint32_t unk10; - uint32_t unk14; + void *unk14; uint32_t unk18; - uint32_t unk1C; - uint32_t unk20; + void *unk1C; + void *unk20; char module_name[28]; uint32_t unk40; uint32_t unk44; - uint32_t unk48; - uint32_t unk4C; - uint32_t unk50; - uint32_t unk54; - uint32_t unk58; - uint32_t unk5C; - uint32_t unk60; - uint32_t unk64; - uint32_t unk68; - uint32_t unk6C; - uint32_t unk70; - uint32_t unk74; - uint32_t unk78; - uint32_t unk7C; - uint32_t unk80; - uint32_t unk84; -} SceKernelLoadedModuleInfo; + uint32_t nid; + int segments_num; + union { + struct { + SceKernelSegmentInfo2 SegmentInfo[1]; + uint32_t addr[4]; + } seg1; + struct { + SceKernelSegmentInfo2 SegmentInfo[2]; + uint32_t addr[4]; + } seg2; + struct { + SceKernelSegmentInfo2 SegmentInfo[3]; + uint32_t addr[4]; + } seg3; + struct { + SceKernelSegmentInfo2 SegmentInfo[4]; + uint32_t addr[4]; + } seg4; + }; +} SceKernelModuleListInfo; typedef struct { @@ -151,20 +162,34 @@ int sceKernelSearchModuleByName(const char *module_name, const char *path, int p SceUID sceKernelGetProcessMainModule(SceUID pid); /** - * @par Example1: Acquire max to 10 module info + * @par Example1: Get max to 10 kernel module info * @code - * SceKernelLoadedModuleInfo infolists[10]; + * SceKernelModuleListInfo infolists[10]; * size_t num = 10;// Get max - * ret = sceKernelGetModuleList2(pid, infolists, &num); + * uint32_t offset = 0; + * SceKernelModuleListInfo *info = &infolists[0]; + * + * sceKernelGetModuleList2(0x10005, infolists, &num); + * + * for(int i=0;i<num;i++){ + * printf("name : %s\n", info->module_name); + * + * if(info->segments_num == 1){ + * printf("vaddr:0x%08X\n", info->seg1.SegmentInfo[0].vaddr); + * }else if(info->segments_num == 2){ + * printf("vaddr:0x%08X\n", info->seg2.SegmentInfo[0].vaddr); + * } + * info = ((char *)info) + info->size; + * } * @endcode * - * @param[in] pid - target pid - * @param[out] infolists - infolists output - * @param[in] num - Specify the maximum number of modinfolist to retrieve. If the function returns 0, it returns the number of modules loaded in the target pid in num + * @param[in] pid - target pid + * @param[out] infolists - infolists output + * @param[inout] num - Specify the maximum number of modinfolist to retrieve. If the function returns 0, it returns the number of modules loaded in the target pid in num * * @return 0 on success, < 0 on error. */ -int sceKernelGetModuleList2(SceUID pid, SceKernelLoadedModuleInfo *infolists, size_t *num); +int sceKernelGetModuleList2(SceUID pid, SceKernelModuleListInfo *infolists, size_t *num); /** * @param[in] pid - target pid |