SceModule structure has always been incorrect.
Code: Select all
typedef struct
{
	SceModule *	next; //0, 0x00
	u16 		attribute; //4, 0x04
	u8 			version[2]; //6, 0x06
	char 		modname[27]; //8, 0x08
	char 		terminal; //35, 0x23
	u16 		status; //36, 0x24 (AND 0x100 ? (usermodule) | (kernelmodule))
	u16 		padding; //38, 0x26
	u32 		unk_28; //40, 0x28
	SceUID 		modid; //44, 0x2C
	SceUID 		usermod_thid; //48, 0x30
	SceUID 		memid; //52, 0x34
	SceUID 		mpidtext; //56, 0x38
	SceUID 		mpiddata; //60, 0x3C
	void *		ent_top; //64, 0x40
	u32 		ent_size; //68, 0x44
	void *		stub_top; //72, 0x48
	u32 		stub_size; //76, 0x4C
	int 		(* module_start)(SceSize, void *); //80, 0x50
	int 		(* module_stop)(SceSize, void *); //84, 0x54
	int 		(* module_bootstart)(SceSize, void *); //88, 0x58
	int 		(* module_reboot_before)(SceSize, void *); //92, 0x5C
	int 		(* module_reboot_phase)(SceSize, void *); //96, 0x60
	u32 		entry_addr; //100, 0x64(seems to be repeated)
	u32 		gp_value; //104, 0x68
	u32 		text_addr; //108, 0x6C
	u32 		text_size; //112, 0x70
	u32 		data_size; //116, 0x74
	u32 		bss_size; //120, 0x78
	u8 			nsegment; //124, 0x7C
	u8			padding[3]; //125, 0x7D
	u32 		segmentaddr[4]; //128, 0x80
	u32 		segmentsize[4]; //144, 0x90
	int 		module_start_thread_priority; //160, 0xA0
	SceSize 	module_start_thread_stacksize; //164, 0xA4
	SceUInt 	module_start_thread_attr; //168, 0xA8
	int 		module_stop_thread_priority; //172, 0xAC
	SceSize 	module_stop_thread_stacksize; //176, 0xB0
	SceUInt 	module_stop_thread_attr; //180, 0xB4
	int 		module_reboot_before_thread_priority; //184, 0xB8
	SceSize 	module_reboot_before_thread_stacksize; //188, 0xBC
	SceUInt 	module_reboot_before_thread_attr; //192, 0xC0
} SceModule;
Thats the one I reversed from 1.50. It's changed a little recently adding new things, but thats the most upto date version.