Files
Orbis-Suite-3.0/Playstation/OrbisLibGeneralHelper/Utilities.cpp
T
2023-01-19 23:01:42 -07:00

89 lines
1.6 KiB
C++

#include "Common.h"
#include "Utilities.h"
#define KLOG_FMT "[OrbisHelper] %s"
void klog(const char* fmt, ...)
{
char Buffer[0x200];
char Buffer2[0x200];
//Create full string from va list.
va_list args;
va_start(args, fmt);
vsprintf(Buffer, fmt, args);
va_end(args);
sprintf(Buffer2, KLOG_FMT, Buffer);
sceKernelDebugOutText(0, Buffer2);
}
jbc_cred BackupCred;
bool Jailbroken = false;
void Jailbreak()
{
if (!Jailbroken)
{
jbc_get_cred(&BackupCred);
jbc_cred jbCred;
jbc_get_cred(&jbCred);
jbc_jailbreak_cred(&jbCred);
jbc_set_cred(&jbCred);
Jailbroken = true;
}
}
void RestoreJail()
{
if (Jailbroken)
{
jbc_set_cred(&BackupCred);
}
}
#define ModuleMax 200
bool GetModuleFromAddress(uint64_t Address, OrbisKernelModuleInfo* out)
{
OrbisKernelModule List[ModuleMax];
size_t moduleCount;
auto res = sceKernelGetModuleList(List, sizeof(List), &moduleCount);
if (res != 0)
{
klog("GetModuleFromAddress(): Failed to get Module List: %llX\n", res);
return false;
}
for (int i = 0; i < ModuleMax; i++)
{
out->size = sizeof(OrbisKernelModuleInfo);
res = sceKernelGetModuleInfo(List[i], out);
if (res == 0)
{
for (int j = 0; j < out->segmentCount; j++)
{
auto baseAddress = (uint64_t)out->segmentInfo[j].address;
auto segSize = out->segmentInfo[j].size;
if (Address >= baseAddress && Address < (baseAddress + segSize))
{
return true;
}
}
}
}
return false;
}
bool IsMemoryMapped(uint64_t address)
{
OrbisKernelVirtualQueryInfo info;
return sceKernelVirtualQuery((void*)address, 0, &info, sizeof(info)) == 0;
}