Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- //0x3A622550,sceCtrlPeekBufferPositive
- /*
- sceCtrl
- Stub Entry:
- Library name pointer:0896E964
- Import flags:0011
- Library version: 4001
- Import stubs: 0005
- Number of imports: 0003
- Pointer to NIDs:08971060
- Pointer to stubs:0896E58C
- */
- /*
- Memory Regions:
- Region 0: Base 0x00010000 - Size 0x00004000 - Scratchpad
- Region 1: Base 0x40010000 - Size 0x00004000 - Scratchpad (uncached)
- Region 2: Base 0x04000000 - Size 0x00200000 - VRAM
- Region 3: Base 0x44000000 - Size 0x00200000 - VRAM (uncached)
- Region 4: Base 0x08800000 - Size 0x01800000 - User memory
- Region 5: Base 0x48800000 - Size 0x01800000 - User memory (uncached)
- Region 6: Base 0x88000000 - Size 0x00400000 - Kernel memory (low)
- Region 7: Base 0xA8000000 - Size 0x00400000 - Kernel memory (low uncached)
- Region 10: Base 0x88800000 - Size 0x01800000 - Kernel memory (high)
- Region 11: Base 0xA8800000 - Size 0x01800000 - Kernel memory (high uncached)
- Region 12: Base 0xBFC00000 - Size 0x00100000 - Internal RAM
- */
- void _sw(unsigned int value, unsigned int *addr)
- {
- *addr = value;
- }
- unsigned int _lw(unsigned int *addr)
- {
- return *addr;
- }
- #define USER_ADDRESS (0x08800000)
- #define FUNCTION_ADDRESS (0x08804000)
- //J target Jump pc=pc_upper|(target<<2) 000010 target
- //JR rs Jump Register pc=rs 000000 rs 000000000000000 001000
- #define MIPS_J (0x08000000) //0b000010 0000000000000000000000000
- #define MIPS_JR (0x8) //0b001000 0000000000000000000000000
- #define MIPS_NOP (0x00000000)
- #define MIPS_REG_RA (31)
- #define MIPS_REG_T8 (24)
- #define GET_INSTRUCTION(x) (_lw(x))
- #define GET_OPCODE(x) ((GET_INSTRUCTION(x) >> 26) & 0x3F)
- #define MAKE_JUMP(a, b) _sw( MIPS_J | ((b >> 2) & 0x3FFFFFF), a) //(address, address to jump)
- #define MAKE_JUMP_REGISTER(a, reg) _sw( ((reg<<21) & 0x3FFFFFF) | MIPS_JR, a)
- #define MAKE_NOP(a) _sw( MIPS_NOP, a)
- int main(int argc, char **argv)
- {
- unsigned int lol;
- MAKE_JUMP_REGISTER(&lol, MIPS_REG_T8);
- printf("0x%X", lol);
- getchar();
- return 0;
- }
- //SceModule *myModule = sceKernelFindModuleByName(module_name);
- unsigned int *findStubByNID(SceModule *module, PspNid NID)
- {
- if(module == NULL)
- {
- printf("Error module '%s'", module->modname);
- return NULL;
- }
- unsigned int stub_size = myModule->stub_size;
- unsigned int stub_top = myModule->stub_top;
- unsigned int stub_end = stub_top + (stub_size/4); //32 bits, 4 bytes = 1 instr
- SceLibraryStubTable *stubTable;
- int i, stubTableSize;
- while(stub_top < stub_end)
- {
- stubTable = (SceLibraryStubTable *)stub_top;
- stubTableSize = stubTable->stubcount;
- for(i = 0; i < stubTableSize; i++)
- {
- if(stubTable->nidtable[i] == NID)
- {
- printf("Found NID %u at address: %u", NID, (stubTable + i*2)); //*2 since each stub is 2 instructions long (64 bits)
- return (stubTable + i*2); // &stubTable[i*2]
- }
- }
- stub_top += stubTable->len;
- }
- return NULL;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement