Move API out of Toolbox prx, Install pkg from HDD & Updating API packets.

This commit is contained in:
Greg
2022-12-03 22:49:20 -07:00
parent c03de8d2d1
commit a8d2622cc2
54 changed files with 1508 additions and 720 deletions
-176
View File
@@ -1,176 +0,0 @@
#pragma once
#if defined(__cplusplus)
extern "C" {
#endif
#if defined(KERNELDRIVER)
#include <sys/ioccom.h>
#else
#include <sys/ioctl.h>
#define IOC_VOID 0x20000000 /* no parameters */
#define IOC_OUT 0x40000000 /* copy out parameters */
#define IOC_IN 0x80000000 /* copy in parameters */
#define IOC_INOUT (IOC_IN|IOC_OUT)
#endif
#if defined(__cplusplus)
};
#endif
enum KDriverCommands
{
/* ######## Proc Commands ####### */
CMD_PROC_LIST,
CMD_PROC_INFO,
CMD_PROC_MODULE_LIST,
CMD_PROC_READ_WRITE_MEMORY,
CMD_PROC_ALLOC_MEMORY,
CMD_PROC_FREE_MEMORY,
CMD_PROC_SPRX,
CMD_PROC_ELF,
/* ############################## */
/* ###### Kernel Commands ####### */
CMD_KERN_READ_WRITE_MEMORY,
/* ############################## */
/* ###### KDriver Commands ###### */
CMD_KDRIVER_INFO,
/* ############################## */
};
// Process Commands
struct KDriver_ProcList
{
uint64_t UserlandAddr;
size_t UserlandSize;
int ProcCount;
};
struct ProcInfo
{
int PID;
bool Attached;
char ProcName[32];
char TitleID[10];
uint64_t TextSegmentBase;
uint64_t TextSegmentLen;
uint64_t DataSegmentBase;
uint64_t DataSegmentLen;
};
struct KDriver_ProcSPRX
{
int CallType;
char ProcName[32];
int Handle;
char Path[4096];
bool CallEntryExit;
};
struct KDriver_ProcInfo
{
int ProcessID;
uint64_t UserlandAddr;
size_t UserlandSize;
int ThreadCount;
};
struct ProcInfoExt
{
struct ThreadInfo
{
int ThreadId;
char Name[36];
int Errno;
int RetVal;
};
int ProcessID;
int Attached;
int Signal;
int Code;
int Stops;
int StopType;
char ProcName[32];
char TitleID[10];
char ElfPath[1024];
char RandomizedPath[256];
uint64_t TextSegmentBase;
uint64_t TextSegmentLen;
uint64_t DataSegmentBase;
uint64_t DataSegmentLen;
int ThreadCount;
ThreadInfo Threads[];
};
struct KDriver_ModuleList
{
int ProcessID;
uint64_t UserlandAddr;
size_t UserlandSize;
int ModuleCount;
};
struct ModuleInfo
{
int Handle;
char Name[36];
char Path[256];
uint64_t TextSegmentBase;
uint64_t TextSegmentLen;
uint64_t DataSegmentBase;
uint64_t DataSegmentLen;
};
struct KDriver_ReadWriteMemory
{
int ProcessID;
bool IsRead;
uint64_t ProcessAddress;
uint64_t UserlandAddr;
size_t Length;
};
struct KDriver_AllocFreeMemory
{
int ProcessID;
size_t Ammount;
uint64_t ProcessAddress;
};
struct KDriver_ProcELF
{
int ProcessID;
uint64_t ELFAddress;
size_t ELFSize;
};
#define PROC_LIST _IOC(IOC_INOUT, 'P', (uint32_t)(KDriverCommands::CMD_PROC_LIST), sizeof(KDriver_ProcList))
#define PROC_INFO _IOC(IOC_INOUT, 'P', (uint32_t)(KDriverCommands::CMD_PROC_INFO), sizeof(KDriver_ProcInfo))
#define PROC_MODULE_LIST _IOC(IOC_INOUT, 'P', (uint32_t)(KDriverCommands::CMD_PROC_MODULE_LIST), sizeof(KDriver_ModuleList))
#define PROC_READ_WRITE_MEMORY _IOC(IOC_INOUT, 'P', (uint32_t)(KDriverCommands::CMD_PROC_READ_WRITE_MEMORY), sizeof(KDriver_ReadWriteMemory))
#define PROC_ALLOC_MEMORY _IOC(IOC_INOUT, 'P', (uint32_t)(KDriverCommands::CMD_PROC_ALLOC_MEMORY), sizeof(KDriver_AllocFreeMemory))
#define PROC_FREE_MEMORY _IOC(IOC_INOUT, 'P', (uint32_t)(KDriverCommands::CMD_PROC_FREE_MEMORY), sizeof(KDriver_AllocFreeMemory))
#define PROC_SPRX _IOC(IOC_INOUT, 'P', (uint32_t)(KDriverCommands::CMD_PROC_SPRX), sizeof(KDriver_ProcSPRX))
#define PROC_ELF _IOC(IOC_INOUT, 'P', (uint32_t)(KDriverCommands::CMD_PROC_ELF), sizeof(KDriver_ProcELF))
// Kernel Commands
#define KERN_READ_WRITE_MEMORY _IOC(IOC_INOUT, 'K', (uint32_t)(KDriverCommands::CMD_KERN_READ_WRITE_MEMORY), sizeof(KDriver_ReadWriteMemory))
// Kdriver Commands
struct KDriver_Info
{
int MajorVersion;
int MinorVersion;
int BuildVersion;
bool Running;
int(*Shutdown)();
int(*Entry)(void* p);
void* ELFBase;
int Size;
};
#define KDRIVER_INFO _IOC(IOC_OUT, 'D', (uint32_t)(KDriverCommands::CMD_KDRIVER_INFO), sizeof(KDriver_Info))
+80
View File
@@ -0,0 +1,80 @@
#include "Common.h"
#include "API.h"
Proc* API::Proc;
Debug* API::Debug;
Target* API::Target;
SocketListener* API::Listener;
bool API::Running = false;
void API::ListenerCallback(void* tdParam, OrbisNetId s)
{
auto Packet = RecievePacket<APIPacket>(s);
if (Packet != nullptr)
{
// Make sure were getting the proper packet version.
if (Packet->PacketVersion != PACKET_VERSION)
{
//klog("Packet version %i does not match our expected %i version!\n", Packet->PacketVersion, PACKET_VERSION);
free(Packet);
return;
}
// Send out the command to the right places.
switch (Packet->Command)
{
default:
klog("API: Invalid Command %i...\n", Packet->Command);
break;
case APICommands::PROC_START ... APICommands::PROC_END:
Proc->HandleAPI(s, Packet);
break;
case APICommands::DBG_START ... APICommands::DBG_END:
Debug->HandleAPI(s, Packet);
break;
case APICommands::KERN_START ... APICommands::KERN_END:
klog("Kernel API Call\n");
break;
case APICommands::TARGET_START ... APICommands::TARGET_END:
Target->HandleAPI(s, Packet);
break;
}
}
// Clean up. :)
free(Packet);
}
void API::Init()
{
if (!Running)
{
klog("API Startup.\n");
Proc = new class Proc();
Debug = new class Debug();
Target = new class Target();
Listener = new SocketListener(ListenerCallback, NULL, 6900);
Running = true;
}
}
void API::Term()
{
if (Running)
{
delete Proc;
delete Debug;
delete Target;
delete Listener;
Running = false;
}
}
+21
View File
@@ -1 +1,22 @@
#pragma once
#include "Proc.h"
#include "Debug.h"
#include "Target.h"
#include "SocketListener.h"
#include "APIHelper.h"
class API
{
private:
static Proc* Proc;
static Debug* Debug;
static Target* Target;
static SocketListener* Listener;
static void ListenerCallback(void* tdParam, OrbisNetId s);
public:
static bool Running;
static void Init();
static void Term();
};
@@ -1,6 +1,9 @@
#pragma once
#include "Common.h"
#define PACKET_VERSION 1
#define PACKET_VERSION 2
#pragma region Commands
enum APICommands
{
@@ -18,6 +21,7 @@ enum APICommands
/* ##### Debugger functions ##### */
DBG_START,
API_DBG_ATTACH, /* Debugger attach to target */
API_DBG_DETACH, /* Debugger detach from target */
API_DBG_GET_CURRENT,
@@ -63,19 +67,23 @@ enum APICommands
API_DBG_WATCHPOINT_REMOVE,
API_DBG_WATCHPOINT_GETINFO,
API_DBG_WATCHPOINT_LIST,
DBG_END,
/* ############################## */
/* ###### Kernel functions ###### */
KERN_START,
API_KERN_BASE,
API_KERN_READ,
API_KERN_WRITE,
KERN_END,
/* ############################## */
/* ###### Target functions ###### */
TARGET_START,
API_TARGET_INFO,
API_TARGET_RESTMODE,
API_TARGET_SHUTDOWN,
@@ -85,11 +93,15 @@ enum APICommands
API_TARGET_SET_LED,
API_TARGET_DUMP_PROC,
API_TARGET_SET_SETTINGS,
//API_TARGET_LOAD_VSH_MODULE
TARGET_END,
/* ############################## */
};
#pragma endregion
#pragma region Generic
enum APIResults
{
API_OK = 1,
@@ -113,39 +125,36 @@ struct APIPacket
char ProcName[32];
};
#pragma endregion
#pragma region Process
struct ProcPacket
{
int32_t ProcessID; //0x00
int32_t Attached; //0x04
char ProcName[32]; //0x08
char TitleID[10]; //0x28
uint64_t TextSegmentBase;
uint64_t TextSegmentLen;
uint64_t DataSegmentBase;
uint64_t DataSegmentLen;
int32_t ProcessId;
char Name[32];
char TitleId[10];
};
struct ModuleListPacket
#pragma endregion
#pragma region Debug
struct LibraryPacket
{
char Name[36]; //0x00
char Handle[256]; //0x24
int mHandle; //0x124
uint64_t TextSegmentBase; //0x128
uint64_t TextSegmentLen; //0x130
uint64_t DataSegmentBase; //0x138
uint64_t DataSegmentLen; //0x140
int64_t Handle;
char Path[256];
int32_t SegmentCount;
SceDbgModuleSegmentInfo Segments[4];
};
struct ProcRWPacket
struct DbgRWPacket
{
uint64_t Address;
uint64_t Length;
};
struct ProcSPRXPacket
struct DbgSPRXPacket
{
char Name[256];
char Path[256];
@@ -162,13 +171,6 @@ struct ProcBreakpointPacket
#pragma endregion
#pragma region Debug
#pragma endregion
#pragma region Kernel
@@ -177,16 +179,6 @@ struct ProcBreakpointPacket
#pragma region Target
enum ConsoleTypes
{
UNK,
DIAG, //0x80
DEVKIT, //0x81
TESTKIT, //0x82
RETAIL, //0x83 -> 0x8F
KRATOS, //0xA0 IMPOSSIBLE??
};
struct MemoryInfo
{
int Used;
+18 -10
View File
@@ -1,25 +1,33 @@
#pragma once
#include <math.h>
#include <stack>
#include <functional>
#include <errno.h>
#include <map>
#include <vector>
#include <string>
#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/wait.h>
#include <unistd.h>
#include <stddef.h>
#include <stdint.h>
#include <signal.h>
#include <orbis/libkernel.h>
#include <orbis/libmonovm.h>
#include <orbis/RegMgr.h>
#include <orbis/Net.h>
#include <orbis/NetCtl.h>
#include <orbis/SystemService.h>
#include <orbis/AppInstUtil.h>
#include <orbis/Bgft.h>
#include <orbis/Sysmodule.h>
#include <orbis/UserService.h>
#include <orbis/Sysmodule.h>
#include <orbis/SystemService.h>
#include <unistd.h>
#include <sys/stat.h>
#include <fcntl.h>
#include "SocketListener.h"
#include "Utilities.h"
#include "GoldHEN.h"
#include "libjbc.h"
#include "libjbc.h"
#include "System.h"
#include "Flash.h"
#include "APIPackets.h"
+14
View File
@@ -0,0 +1,14 @@
#include "Common.h"
#include "Flash.h"
void ReadFlash(off_t Offset, void* Data, unsigned int Size)
{
int fd = sceKernelOpen("/dev/sflash0", ORBIS_KERNEL_O_RDONLY, 0777);
if (fd)
{
sceKernelPread(fd, Data, Size, Offset);
sceKernelClose(fd);
}
else
klog("Failed to Open sflash\n");
}
+12
View File
@@ -0,0 +1,12 @@
#pragma once
#define FLASH_FACTORY_FW 0x1C9060 // 4 Bytes
#define FLASH_CURRENT_FW 0x1C9068 // 4 Bytes
#define FLASH_MB_SERIAL 0x1C8000 // 14 Bytes String
#define FLASH_SERIAL 0x1C8030 // 10 Bytes String
#define FLASH_MODEL 0x1C8041 // 14 Bytes String
#define FLASH_LAN_MAC 0x1C4021 // 6 Bytes
#define FLASH_UART_FLAG 0x1C931F // 1 Byte
#define FLASH_IDU_MODE 0x1CA600 // 1 Byte
void ReadFlash(off_t Offset, void* Data, unsigned int Size);
@@ -62,16 +62,37 @@ del /s /q /f $(IntDir)\*.oelf</NMakeCleanCommandLine>
</ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="API.cpp" />
<ClCompile Include="APIHelper.cpp" />
<ClCompile Include="Breakpoint.cpp" />
<ClCompile Include="Debug.cpp" />
<ClCompile Include="Flash.cpp" />
<ClCompile Include="main.cpp" />
<ClCompile Include="build.bat" />
<ClCompile Include="Proc.cpp" />
<ClCompile Include="Registry.cpp" />
<ClCompile Include="SocketListener.cpp" />
<ClCompile Include="System.cpp" />
<ClCompile Include="Target.cpp" />
<ClCompile Include="Utilities.cpp" />
<ClCompile Include="Watchpoint.cpp" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="API.h" />
<ClInclude Include="APIHelper.h" />
<ClInclude Include="APIPackets.h" />
<ClInclude Include="Breakpoint.h" />
<ClInclude Include="Common.h" />
<ClInclude Include="Debug.h" />
<ClInclude Include="Flash.h" />
<ClInclude Include="Proc.h" />
<ClInclude Include="Registry.h" />
<ClInclude Include="SocketListener.h" />
<ClInclude Include="System.h" />
<ClInclude Include="Target.h" />
<ClInclude Include="Utilities.h" />
<ClInclude Include="libjbc.h" />
<ClInclude Include="Version.h" />
<ClInclude Include="Watchpoint.h" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
@@ -37,6 +37,12 @@
<Filter Include="Source Files\API\Misc">
<UniqueIdentifier>{b1c92aaf-bc5d-40c6-9066-2e094daec1eb}</UniqueIdentifier>
</Filter>
<Filter Include="Source Files\Utilities\PS Utils">
<UniqueIdentifier>{1208a8d1-5a46-4050-b790-ead6e42541ce}</UniqueIdentifier>
</Filter>
<Filter Include="Header Files\Utilities\PS Utils">
<UniqueIdentifier>{5094835e-2ace-4366-93ee-a65317ee8a62}</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>
<ClCompile Include="build.bat" />
@@ -49,6 +55,36 @@
<ClCompile Include="main.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="APIHelper.cpp">
<Filter>Source Files\API\Misc</Filter>
</ClCompile>
<ClCompile Include="SocketListener.cpp">
<Filter>Source Files\Utilities</Filter>
</ClCompile>
<ClCompile Include="Breakpoint.cpp">
<Filter>Source Files\API\CmdGroups</Filter>
</ClCompile>
<ClCompile Include="Proc.cpp">
<Filter>Source Files\API\CmdGroups</Filter>
</ClCompile>
<ClCompile Include="Target.cpp">
<Filter>Source Files\API\CmdGroups</Filter>
</ClCompile>
<ClCompile Include="Watchpoint.cpp">
<Filter>Source Files\API\CmdGroups</Filter>
</ClCompile>
<ClCompile Include="Debug.cpp">
<Filter>Source Files\API\CmdGroups</Filter>
</ClCompile>
<ClCompile Include="System.cpp">
<Filter>Source Files\Utilities\PS Utils</Filter>
</ClCompile>
<ClCompile Include="Registry.cpp">
<Filter>Source Files\Utilities\PS Utils</Filter>
</ClCompile>
<ClCompile Include="Flash.cpp">
<Filter>Source Files\Utilities\PS Utils</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="Common.h">
@@ -57,14 +93,47 @@
<ClInclude Include="Utilities.h">
<Filter>Header Files\Utilities</Filter>
</ClInclude>
<ClInclude Include="libjbc.h">
<Filter>Header Files\Utilities</Filter>
</ClInclude>
<ClInclude Include="API.h">
<Filter>Header Files\API</Filter>
</ClInclude>
<ClInclude Include="Version.h">
<Filter>Header Files\Utilities</Filter>
</ClInclude>
<ClInclude Include="APIHelper.h">
<Filter>Header Files\API\Misc</Filter>
</ClInclude>
<ClInclude Include="APIPackets.h">
<Filter>Header Files\API\Misc</Filter>
</ClInclude>
<ClInclude Include="SocketListener.h">
<Filter>Header Files\Utilities</Filter>
</ClInclude>
<ClInclude Include="Watchpoint.h">
<Filter>Header Files\API\CmdGroups</Filter>
</ClInclude>
<ClInclude Include="Target.h">
<Filter>Header Files\API\CmdGroups</Filter>
</ClInclude>
<ClInclude Include="Proc.h">
<Filter>Header Files\API\CmdGroups</Filter>
</ClInclude>
<ClInclude Include="Breakpoint.h">
<Filter>Header Files\API\CmdGroups</Filter>
</ClInclude>
<ClInclude Include="Debug.h">
<Filter>Header Files\API\CmdGroups</Filter>
</ClInclude>
<ClInclude Include="libjbc.h">
<Filter>Header Files\Utilities\PS Utils</Filter>
</ClInclude>
<ClInclude Include="System.h">
<Filter>Header Files\Utilities\PS Utils</Filter>
</ClInclude>
<ClInclude Include="Registry.h">
<Filter>Header Files\Utilities\PS Utils</Filter>
</ClInclude>
<ClInclude Include="Flash.h">
<Filter>Header Files\Utilities\PS Utils</Filter>
</ClInclude>
</ItemGroup>
</Project>
@@ -1,7 +1,6 @@
#include "Common.h"
#include "Proc.h"
#include "APIHelper.h"
#include "KDriver.h"
void Proc::HandleAPI(OrbisNetId Sock, APIPacket* Packet)
{
@@ -40,8 +39,9 @@ Proc::~Proc()
void Proc::SendProcessList(OrbisNetId Sock)
{
// TODO: Update
// Allocate space for packet to send.
auto Packet = (ProcPacket*)malloc(sizeof(ProcPacket));
/*auto Packet = (ProcPacket*)malloc(sizeof(ProcPacket));
// Gets list of running processes.
auto procInfo = (ProcInfo*)malloc(sizeof(ProcInfo) * 200);
@@ -72,5 +72,5 @@ void Proc::SendProcessList(OrbisNetId Sock)
// Cleanup.
free(Packet);
free(procInfo);
free(procInfo);*/
}
+663
View File
@@ -0,0 +1,663 @@
#include "Common.h"
#include "Registry.h"
uint Registry_Find_By_Name(const char* Name)
{
static std::map<const char*, uint> RegistryEntries;
static bool Initialized;
if (!Initialized)
{
RegistryEntries.insert(std::pair<const char*, uint>("/REGISTRY/version", 0x1010000));
RegistryEntries.insert(std::pair<const char*, uint>("/REGISTRY", 0x1000000));
RegistryEntries.insert(std::pair<const char*, uint>("/REGISTRY/install", 0x1020000));
RegistryEntries.insert(std::pair<const char*, uint>("/REGISTRY/update", 0x1030000));
RegistryEntries.insert(std::pair<const char*, uint>("/REGISTRY/not_save", 0x1040000));
RegistryEntries.insert(std::pair<const char*, uint>("/REGISTRY/recover", 0x1050000));
RegistryEntries.insert(std::pair<const char*, uint>("/REGISTRY/downgrade", 0x1060000));
RegistryEntries.insert(std::pair<const char*, uint>("/REGISTRY/bootcount", 0x1070000));
RegistryEntries.insert(std::pair<const char*, uint>("/REGISTRY/lastver", 0x1080000));
RegistryEntries.insert(std::pair<const char*, uint>("/REGISTRY/init_flag", 0x1400000));
RegistryEntries.insert(std::pair<const char*, uint>("/SYSTEM", 0x2000000));
RegistryEntries.insert(std::pair<const char*, uint>("/SYSTEM/update_mode", 0x2010000));
RegistryEntries.insert(std::pair<const char*, uint>("/SYSTEM/language", 0x2020000));
RegistryEntries.insert(std::pair<const char*, uint>("/SYSTEM/initialize", 0x2040000));
RegistryEntries.insert(std::pair<const char*, uint>("/SYSTEM/nickname", 0x2050000));
RegistryEntries.insert(std::pair<const char*, uint>("/SYSTEM/dimmer_interval", 0x2060000));
RegistryEntries.insert(std::pair<const char*, uint>("/SYSTEM/eapfunction", 0x2070000));
RegistryEntries.insert(std::pair<const char*, uint>("/SYSTEM/enable_voicercg", 0x2080000));
RegistryEntries.insert(std::pair<const char*, uint>("/SYSTEM/profilech_ver", 0x20A0000));
RegistryEntries.insert(std::pair<const char*, uint>("/SYSTEM/button_assign", 0x20B0000));
RegistryEntries.insert(std::pair<const char*, uint>("/SYSTEM/backup_mode", 0x20C0000));
RegistryEntries.insert(std::pair<const char*, uint>("/SYSTEM/pon_memory_test", 0x20D0000));
RegistryEntries.insert(std::pair<const char*, uint>("/SYSTEM/game_rec_mode", 0x20E0000));
RegistryEntries.insert(std::pair<const char*, uint>("/SYSTEM/shell_function", 0x20F0000));
RegistryEntries.insert(std::pair<const char*, uint>("/SYSTEM/pad_connection", 0x2100000));
RegistryEntries.insert(std::pair<const char*, uint>("/SYSTEM/data_transfer", 0x2110000));
RegistryEntries.insert(std::pair<const char*, uint>("/SYSTEM/base_mode_clkup", 0x2120000));
RegistryEntries.insert(std::pair<const char*, uint>("/SYSTEM/neo_vddnb_vid_offset", 0x2400000));
RegistryEntries.insert(std::pair<const char*, uint>("/SYSTEM/UPDATE", 0x2800000));
RegistryEntries.insert(std::pair<const char*, uint>("/SYSTEM/UPDATE/server_url", 0x2800100));
RegistryEntries.insert(std::pair<const char*, uint>("/SYSTEM/UPDATE/eula_version", 0x2800200));
RegistryEntries.insert(std::pair<const char*, uint>("/SYSTEM/UPDATE/pscode", 0x2800300));
RegistryEntries.insert(std::pair<const char*, uint>("/SYSTEM/UPDATE/reboot_flag", 0x2800400));
RegistryEntries.insert(std::pair<const char*, uint>("/SYSTEM/UPDATE/auto_download", 0x2800500));
RegistryEntries.insert(std::pair<const char*, uint>("/SYSTEM/UPDATE/idu_version", 0x2800600));
RegistryEntries.insert(std::pair<const char*, uint>("/SYSTEM/UPDATE/next_check", 0x2800700));
RegistryEntries.insert(std::pair<const char*, uint>("/SYSTEM/UPDATE/auto_update", 0x2800800));
RegistryEntries.insert(std::pair<const char*, uint>("/SYSTEM/UPDATE/last_version", 0x2800900));
RegistryEntries.insert(std::pair<const char*, uint>("/SYSTEM/UPDATE/last_updversion", 0x2800A00));
RegistryEntries.insert(std::pair<const char*, uint>("/SYSTEM/UPDATE/build_number", 0x2804000));
RegistryEntries.insert(std::pair<const char*, uint>("/SYSTEM/UPDATE/auto_update_int", 0x2808000));
RegistryEntries.insert(std::pair<const char*, uint>("/SYSTEM/UPDATE/tool_update_chk", 0x2808100));
RegistryEntries.insert(std::pair<const char*, uint>("/SYSTEM/UPDATE/server_url_beta", 0x2808200));
RegistryEntries.insert(std::pair<const char*, uint>("/SYSTEM/UPDATE/check_limit", 0x2808300));
RegistryEntries.insert(std::pair<const char*, uint>("/SYSTEM/UPDATE/ignore_entcheck", 0x2808400));
RegistryEntries.insert(std::pair<const char*, uint>("/SYSTEM/UPDATE/strict_verchk", 0x2808500));
RegistryEntries.insert(std::pair<const char*, uint>("/SYSTEM/POWER", 0x2820000));
RegistryEntries.insert(std::pair<const char*, uint>("/SYSTEM/POWER/charge", 0x2820100));
RegistryEntries.insert(std::pair<const char*, uint>("/SYSTEM/POWER/signin", 0x2820200));
RegistryEntries.insert(std::pair<const char*, uint>("/SYSTEM/POWER/remote", 0x2820300));
RegistryEntries.insert(std::pair<const char*, uint>("/SYSTEM/POWER/controller_off", 0x2820400));
RegistryEntries.insert(std::pair<const char*, uint>("/SYSTEM/POWER/auto_off_media", 0x2820500));
RegistryEntries.insert(std::pair<const char*, uint>("/SYSTEM/POWER/auto_off_other", 0x2820600));
RegistryEntries.insert(std::pair<const char*, uint>("/SYSTEM/POWER/auto_power_down", 0x2820700));
RegistryEntries.insert(std::pair<const char*, uint>("/SYSTEM/POWER/suspend_to_ram", 0x2820800));
RegistryEntries.insert(std::pair<const char*, uint>("/SYSTEM/POWER/standby_start", 0x2820900));
RegistryEntries.insert(std::pair<const char*, uint>("/SYSTEM/POWER/power_history", 0x2820B00));
RegistryEntries.insert(std::pair<const char*, uint>("/SYSTEM/POWER/spwakeup", 0x2820C00));
RegistryEntries.insert(std::pair<const char*, uint>("/SYSTEM/POWER/charge_minutes", 0x2828000));
RegistryEntries.insert(std::pair<const char*, uint>("/SYSTEM/NOTIFICATION", 0x2840000));
RegistryEntries.insert(std::pair<const char*, uint>("/SYSTEM/NOTIFICATION/invisible_items", 0x2840100));
RegistryEntries.insert(std::pair<const char*, uint>("/SYSTEM/ACTIVATION", 0x2780000));
RegistryEntries.insert(std::pair<const char*, uint>("/SYSTEM/ACTIVATION/mpeg2", 0x2780100));
RegistryEntries.insert(std::pair<const char*, uint>("/SYSTEM/ACTIVATION/vc1", 0x2780200));
RegistryEntries.insert(std::pair<const char*, uint>("/SYSTEM/ACTIVATION/hevc", 0x2780300));
RegistryEntries.insert(std::pair<const char*, uint>("/SYSTEM/ACTIVATION/hevc_soft", 0x2780400));
RegistryEntries.insert(std::pair<const char*, uint>("/SYSTEM/PLATFORMPRIVACY", 0x27C0000));
RegistryEntries.insert(std::pair<const char*, uint>("/SYSTEM/PLATFORMPRIVACY/eu_ws1", 0x27C0100));
RegistryEntries.insert(std::pair<const char*, uint>("/SYSTEM/SPECIFIC", 0x2860000));
RegistryEntries.insert(std::pair<const char*, uint>("/SYSTEM/SPECIFIC/idu_mode", 0x2860100));
RegistryEntries.insert(std::pair<const char*, uint>("/SYSTEM/SPECIFIC/show_mode", 0x2860200));
RegistryEntries.insert(std::pair<const char*, uint>("/SYSTEM/SPECIFIC/arcade_mode", 0x2860300));
RegistryEntries.insert(std::pair<const char*, uint>("/SYSTEM/SPECIFIC/arcade_id", 0x2860500));
RegistryEntries.insert(std::pair<const char*, uint>("/SYSTEM/DOWNLOAD", 0x2880000));
RegistryEntries.insert(std::pair<const char*, uint>("/SYSTEM/DOWNLOAD/autodl_featured", 0x2880100));
RegistryEntries.insert(std::pair<const char*, uint>("/SYSTEM/DOWNLOAD/default_hdd", 0x2880200));
RegistryEntries.insert(std::pair<const char*, uint>("/SYSTEM/DOWNLOAD/bgft_env_slot", 0x2888000));
RegistryEntries.insert(std::pair<const char*, uint>("/SYSTEM/DOWNLOAD/bgft_debug_log", 0x2888100));
RegistryEntries.insert(std::pair<const char*, uint>("/SYSTEM/DOWNLOAD/bgft_debug_ntf", 0x2888200));
RegistryEntries.insert(std::pair<const char*, uint>("/SYSTEM/DOWNLOAD/bgft_debug_bwct", 0x2888300));
RegistryEntries.insert(std::pair<const char*, uint>("/SYSTEM/DB", 0x2900000));
RegistryEntries.insert(std::pair<const char*, uint>("/SYSTEM/DB/default_player", 0x2900100));
RegistryEntries.insert(std::pair<const char*, uint>("/SYSTEM/DB/manifest_usb", 0x2908000));
RegistryEntries.insert(std::pair<const char*, uint>("/SYSTEM/BGDC", 0x2A00000));
RegistryEntries.insert(std::pair<const char*, uint>("/SYSTEM/BGDC/last_modified", 0x2A00100));
RegistryEntries.insert(std::pair<const char*, uint>("/SYSTEM/BGDC/server_url", 0x2A08000));
RegistryEntries.insert(std::pair<const char*, uint>("/SYSTEM/SELF", 0x2B00000));
RegistryEntries.insert(std::pair<const char*, uint>("/SYSTEM/SELF/verr_count", 0x2B00100));
RegistryEntries.insert(std::pair<const char*, uint>("/SYSTEM/SELF/ierr_count", 0x2B00200));
RegistryEntries.insert(std::pair<const char*, uint>("/SYSTEM/WCTL", 0x2B40000));
RegistryEntries.insert(std::pair<const char*, uint>("/SYSTEM/WCTL/server_env", 0x2B40100));
RegistryEntries.insert(std::pair<const char*, uint>("/SYSTEM/AUTO/MOUNTER", 0x2B80000));
RegistryEntries.insert(std::pair<const char*, uint>("/SYSTEM/AUTO/MOUNTER/previous_hdd_id", 0x2B80100));
RegistryEntries.insert(std::pair<const char*, uint>("/SYSTEM/HDD/WRITE/STATS", 0x2BC0000));
RegistryEntries.insert(std::pair<const char*, uint>("/SYSTEM/HDD/WRITE/STATS/last_report", 0x2BC0100));
RegistryEntries.insert(std::pair<const char*, uint>("/SYSTEM/HDD/WRITE/STATS/process_time", 0x2BC0200));
RegistryEntries.insert(std::pair<const char*, uint>("/SYSTEM/HDD/WRITE/STATS/real_time_dur", 0x2BC0300));
RegistryEntries.insert(std::pair<const char*, uint>("/SYSTEM/HDD/WRITE/STATS/sys_int_hdd_r", 0x2BC0400));
RegistryEntries.insert(std::pair<const char*, uint>("/SYSTEM/HDD/WRITE/STATS/sys_int_hdd_w", 0x2BC0500));
RegistryEntries.insert(std::pair<const char*, uint>("/SYSTEM/HDD/WRITE/STATS/sys_ext_hdd_r", 0x2BC0600));
RegistryEntries.insert(std::pair<const char*, uint>("/SYSTEM/HDD/WRITE/STATS/sys_ext_hdd_w", 0x2BC0700));
RegistryEntries.insert(std::pair<const char*, uint>("/SYSTEM/HDD/WRITE/STATS/game_int_hdd_r", 0x2BC0800));
RegistryEntries.insert(std::pair<const char*, uint>("/SYSTEM/HDD/WRITE/STATS/game_int_hdd_w", 0x2BC0900));
RegistryEntries.insert(std::pair<const char*, uint>("/SYSTEM/HDD/WRITE/STATS/game_ext_hdd_r", 0x2BC0A00));
RegistryEntries.insert(std::pair<const char*, uint>("/SYSTEM/HDD/WRITE/STATS/game_ext_hdd_w", 0x2BC0B00));
RegistryEntries.insert(std::pair<const char*, uint>("/SYSTEM/SMR_HDD", 0x2BE0000));
RegistryEntries.insert(std::pair<const char*, uint>("/SYSTEM/SMR_HDD/statechange_ntf", 0x2BE8000));
RegistryEntries.insert(std::pair<const char*, uint>("/SECURITY/PARENTAL", 0x3800000));
RegistryEntries.insert(std::pair<const char*, uint>("/SECURITY/PARENTAL/game", 0x3800100));
RegistryEntries.insert(std::pair<const char*, uint>("/SECURITY/PARENTAL/bd", 0x3800200));
RegistryEntries.insert(std::pair<const char*, uint>("/SECURITY/PARENTAL/bd_age", 0x3800300));
RegistryEntries.insert(std::pair<const char*, uint>("/SECURITY/PARENTAL/dvd_region", 0x3800400));
RegistryEntries.insert(std::pair<const char*, uint>("/SECURITY/PARENTAL/dvd", 0x3800500));
RegistryEntries.insert(std::pair<const char*, uint>("/SECURITY/PARENTAL/browser", 0x3800600));
RegistryEntries.insert(std::pair<const char*, uint>("/SECURITY/PARENTAL/create_account", 0x3800700));
RegistryEntries.insert(std::pair<const char*, uint>("/SECURITY/PARENTAL/passcode", 0x3800800));
RegistryEntries.insert(std::pair<const char*, uint>("/SECURITY/PARENTAL/morpheus", 0x3800900));
RegistryEntries.insert(std::pair<const char*, uint>("/SECURITY/PARENTAL/papc_all_ok", 0x3800A00));
RegistryEntries.insert(std::pair<const char*, uint>("/DATE", 0x5000000));
RegistryEntries.insert(std::pair<const char*, uint>("/DATE/time_zone", 0x5010000));
RegistryEntries.insert(std::pair<const char*, uint>("/DATE/date_format", 0x5020000));
RegistryEntries.insert(std::pair<const char*, uint>("/DATE/time_format", 0x5030000));
RegistryEntries.insert(std::pair<const char*, uint>("/DATE/summer_time", 0x5040000));
RegistryEntries.insert(std::pair<const char*, uint>("/DATE/set_auto", 0x5050000));
RegistryEntries.insert(std::pair<const char*, uint>("/DATE/is_summer_time", 0x5060000));
RegistryEntries.insert(std::pair<const char*, uint>("/DATE/utc_offset", 0x5070000));
RegistryEntries.insert(std::pair<const char*, uint>("/DATE/timezone_offset", 0x5080000));
RegistryEntries.insert(std::pair<const char*, uint>("/DATE/tzdata_update", 0x5090000));
RegistryEntries.insert(std::pair<const char*, uint>("/DATE/is_tz_adjusted", 0x50A0000));
RegistryEntries.insert(std::pair<const char*, uint>("/DATE/rtc_offset", 0x5140000));
RegistryEntries.insert(std::pair<const char*, uint>("/DATE/rtc_net", 0x5150000));
RegistryEntries.insert(std::pair<const char*, uint>("/DATE/rtc_net_dbg", 0x5160000));
RegistryEntries.insert(std::pair<const char*, uint>("/DATE/rtc_net_ad", 0x5170000));
RegistryEntries.insert(std::pair<const char*, uint>("/DATE/fake_geoip", 0x5800000));
RegistryEntries.insert(std::pair<const char*, uint>("/DATE/use_test_cdn", 0x5810000));
RegistryEntries.insert(std::pair<const char*, uint>("/DATE/testserver_slot", 0x5820000));
RegistryEntries.insert(std::pair<const char*, uint>("/USER", 0x7000000));
RegistryEntries.insert(std::pair<const char*, uint>("/USER/auto_login_user", 0x7010000));
RegistryEntries.insert(std::pair<const char*, uint>("/USER/max_used_home_u", 0x7020000));
RegistryEntries.insert(std::pair<const char*, uint>("/USER/init_user", 0x7030000));
RegistryEntries.insert(std::pair<const char*, uint>("/USER/enable_facercg", 0x7040000));
RegistryEntries.insert(std::pair<const char*, uint>("/USER/max_used_guest_", 0x7050000));
RegistryEntries.insert(std::pair<const char*, uint>("/USER/max_used_sharep", 0x7060000));
RegistryEntries.insert(std::pair<const char*, uint>("/USER/cumulative_user", 0x7070000));
RegistryEntries.insert(std::pair<const char*, uint>("/USER/disp_acc_info", 0x7400000));
RegistryEntries.insert(std::pair<const char*, uint>("/USER/new_user_group", 0x7410000));
RegistryEntries.insert(std::pair<const char*, uint>("/ACCESSIBILITY", 0x9000000));
RegistryEntries.insert(std::pair<const char*, uint>("/ACCESSIBILITY/invert_color", 0x9010000));
RegistryEntries.insert(std::pair<const char*, uint>("/ACCESSIBILITY/large_text", 0x9020000));
RegistryEntries.insert(std::pair<const char*, uint>("/ACCESSIBILITY/bold_text", 0x9030000));
RegistryEntries.insert(std::pair<const char*, uint>("/ACCESSIBILITY/contrast", 0x9040000));
RegistryEntries.insert(std::pair<const char*, uint>("/ACCESSIBILITY/shortcut", 0x9050000));
RegistryEntries.insert(std::pair<const char*, uint>("/ACCESSIBILITY/marquee_speed", 0x9060000));
RegistryEntries.insert(std::pair<const char*, uint>("/ACCESSIBILITY/long_press_time", 0x9070000));
RegistryEntries.insert(std::pair<const char*, uint>("/ACCESSIBILITY/TTS", 0x9400000));
RegistryEntries.insert(std::pair<const char*, uint>("/ACCESSIBILITY/TTS/enable", 0x9400100));
RegistryEntries.insert(std::pair<const char*, uint>("/ACCESSIBILITY/TTS/speed", 0x9400200));
RegistryEntries.insert(std::pair<const char*, uint>("/ACCESSIBILITY/TTS/volume", 0x9400300));
RegistryEntries.insert(std::pair<const char*, uint>("/ACCESSIBILITY/TTS/readout", 0x9400400));
RegistryEntries.insert(std::pair<const char*, uint>("/ACCESSIBILITY/DEBUG", 0x9C00000));
RegistryEntries.insert(std::pair<const char*, uint>("/ACCESSIBILITY/DEBUG/text_to_speech", 0x9C00100));
RegistryEntries.insert(std::pair<const char*, uint>("/ACCESSIBILITY/DEBUG/large_text", 0x9C00200));
RegistryEntries.insert(std::pair<const char*, uint>("/ACCESSIBILITY/DEBUG/bold_text", 0x9C00300));
RegistryEntries.insert(std::pair<const char*, uint>("/ACCESSIBILITY/DEBUG/speech_tag", 0x9C04000));
RegistryEntries.insert(std::pair<const char*, uint>("/ACCESSIBILITY/DEBUG/use_ext_tts_dic", 0x9C04100));
RegistryEntries.insert(std::pair<const char*, uint>("/ACCESSIBILITY/DEBUG/tts_debug_log", 0x9C04200));
RegistryEntries.insert(std::pair<const char*, uint>("/VIDEOOUT", 0xA000000));
RegistryEntries.insert(std::pair<const char*, uint>("/VIDEOOUT/mode", 0xA030000));
RegistryEntries.insert(std::pair<const char*, uint>("/VIDEOOUT/color_depth", 0xA040000));
RegistryEntries.insert(std::pair<const char*, uint>("/VIDEOOUT/signal_range", 0xA060000));
RegistryEntries.insert(std::pair<const char*, uint>("/VIDEOOUT/screen_size", 0xA070000));
RegistryEntries.insert(std::pair<const char*, uint>("/VIDEOOUT/enable_cec", 0xA080000));
RegistryEntries.insert(std::pair<const char*, uint>("/VIDEOOUT/yuv_range", 0xA0A0000));
RegistryEntries.insert(std::pair<const char*, uint>("/VIDEOOUT/display_area", 0xA0D0000));
RegistryEntries.insert(std::pair<const char*, uint>("/VIDEOOUT/hdmi_history", 0xA0F0000));
RegistryEntries.insert(std::pair<const char*, uint>("/VIDEOOUT/screen_size_uns", 0xA100000));
RegistryEntries.insert(std::pair<const char*, uint>("/VIDEOOUT/hdcp_off_mode", 0xA110000));
RegistryEntries.insert(std::pair<const char*, uint>("/VIDEOOUT/setting_options", 0xA120000));
RegistryEntries.insert(std::pair<const char*, uint>("/VIDEOOUT/reset_reso_flag", 0xA130000));
RegistryEntries.insert(std::pair<const char*, uint>("/VIDEOOUT/hdcp_version", 0xA140000));
RegistryEntries.insert(std::pair<const char*, uint>("/VIDEOOUT/hdr", 0xA150000));
RegistryEntries.insert(std::pair<const char*, uint>("/VIDEOOUT/hdr_confirmed", 0xA160000));
RegistryEntries.insert(std::pair<const char*, uint>("/VIDEOOUT/disable_hdcp", 0xA320000));
RegistryEntries.insert(std::pair<const char*, uint>("/VIDEOOUT/force_hdr_cap", 0xA330000));
RegistryEntries.insert(std::pair<const char*, uint>("/AUDIOOUT", 0xB000000));
RegistryEntries.insert(std::pair<const char*, uint>("/AUDIOOUT/mode", 0xB010000));
RegistryEntries.insert(std::pair<const char*, uint>("/AUDIOOUT/headphone_out", 0xB030000));
RegistryEntries.insert(std::pair<const char*, uint>("/AUDIOOUT/keytone", 0xB040000));
RegistryEntries.insert(std::pair<const char*, uint>("/AUDIOOUT/system_bgm", 0xB050000));
RegistryEntries.insert(std::pair<const char*, uint>("/AUDIOOUT/connector_type", 0xB060000));
RegistryEntries.insert(std::pair<const char*, uint>("/AUDIOOUT/codec", 0xB070000));
RegistryEntries.insert(std::pair<const char*, uint>("/AUDIOOUT/sound_format", 0xB080000));
RegistryEntries.insert(std::pair<const char*, uint>("/AUDIOOUT/config_options", 0xB090000));
RegistryEntries.insert(std::pair<const char*, uint>("/AUDIOOUT/measure_enable", 0xB800000));
RegistryEntries.insert(std::pair<const char*, uint>("/AUDIOOUT/run_options", 0xB810000));
RegistryEntries.insert(std::pair<const char*, uint>("/NET/IP", 0x14140000));
RegistryEntries.insert(std::pair<const char*, uint>("/NET/IP/ip_address", 0x14140100));
RegistryEntries.insert(std::pair<const char*, uint>("/NET/IP/netmask", 0x14140200));
RegistryEntries.insert(std::pair<const char*, uint>("/NET/IP/default_route", 0x14140300));
RegistryEntries.insert(std::pair<const char*, uint>("/NET/IP/dns_flag", 0x14140400));
RegistryEntries.insert(std::pair<const char*, uint>("/NET/IP/primary_dns", 0x14140500));
RegistryEntries.insert(std::pair<const char*, uint>("/NET/IP/secondary_dns", 0x14140600));
RegistryEntries.insert(std::pair<const char*, uint>("/NET/IP/ip_config", 0x14140700));
RegistryEntries.insert(std::pair<const char*, uint>("/NET/IP/dhcp_hostname", 0x14140800));
RegistryEntries.insert(std::pair<const char*, uint>("/NET/IP/auth_name", 0x14140C00));
RegistryEntries.insert(std::pair<const char*, uint>("/NET/IP/auth_key", 0x14140D00));
RegistryEntries.insert(std::pair<const char*, uint>("/NET/IP/leased_ip", 0x14140E00));
RegistryEntries.insert(std::pair<const char*, uint>("/NET/IP/leased_exp_tick", 0x14140F00));
RegistryEntries.insert(std::pair<const char*, uint>("/NET/COMMON", 0x14190000));
RegistryEntries.insert(std::pair<const char*, uint>("/NET/COMMON/device", 0x14190100));
RegistryEntries.insert(std::pair<const char*, uint>("/NET/COMMON/net_flag", 0x14190600));
RegistryEntries.insert(std::pair<const char*, uint>("/NET/COMMON/conf_type", 0x14190700));
RegistryEntries.insert(std::pair<const char*, uint>("/NET/COMMON/mtu", 0x14190800));
RegistryEntries.insert(std::pair<const char*, uint>("/NET/COMMON/ether_mode", 0x14190900));
RegistryEntries.insert(std::pair<const char*, uint>("/NET/COMMON/ap_auto_config", 0x14190A00));
RegistryEntries.insert(std::pair<const char*, uint>("/NET/WIFI", 0x141E0000));
RegistryEntries.insert(std::pair<const char*, uint>("/NET/WIFI/ssid", 0x141E0100));
RegistryEntries.insert(std::pair<const char*, uint>("/NET/WIFI/wifi_security", 0x141E0200));
RegistryEntries.insert(std::pair<const char*, uint>("/NET/WIFI/wep_key", 0x141E0300));
RegistryEntries.insert(std::pair<const char*, uint>("/NET/WIFI/wpa_key", 0x141E0400));
RegistryEntries.insert(std::pair<const char*, uint>("/NET/WIFI/freq_band", 0x141E0500));
RegistryEntries.insert(std::pair<const char*, uint>("/NET/WIFI/COMMON", 0x141E4000));
RegistryEntries.insert(std::pair<const char*, uint>("/NET/WIFI/COMMON/mtu", 0x141E4001));
RegistryEntries.insert(std::pair<const char*, uint>("/NET/WIFI/IP", 0x141E6000));
RegistryEntries.insert(std::pair<const char*, uint>("/NET/WIFI/IP/ip_config", 0x141E6001));
RegistryEntries.insert(std::pair<const char*, uint>("/NET/WIFI/IP/dhcp_hostname", 0x141E6002));
RegistryEntries.insert(std::pair<const char*, uint>("/NET/WIFI/IP/auth_name", 0x141E6003));
RegistryEntries.insert(std::pair<const char*, uint>("/NET/WIFI/IP/auth_key", 0x141E6004));
RegistryEntries.insert(std::pair<const char*, uint>("/NET/WIFI/IP/ip_address", 0x141E6005));
RegistryEntries.insert(std::pair<const char*, uint>("/NET/WIFI/IP/netmask", 0x141E6006));
RegistryEntries.insert(std::pair<const char*, uint>("/NET/WIFI/IP/default_route", 0x141E6007));
RegistryEntries.insert(std::pair<const char*, uint>("/NET/WIFI/IP/dns_flag", 0x141E6008));
RegistryEntries.insert(std::pair<const char*, uint>("/NET/WIFI/IP/primary_dns", 0x141E6009));
RegistryEntries.insert(std::pair<const char*, uint>("/NET/WIFI/IP/secondary_dns", 0x141E600A));
RegistryEntries.insert(std::pair<const char*, uint>("/NET/WIFI/IP/leased_ip", 0x141E600B));
RegistryEntries.insert(std::pair<const char*, uint>("/NET/WIFI/IP/leased_exp_tick", 0x141E600C));
RegistryEntries.insert(std::pair<const char*, uint>("/NET/WIFI/APP", 0x141E8000));
RegistryEntries.insert(std::pair<const char*, uint>("/NET/WIFI/APP/http_proxy_flag", 0x141E8001));
RegistryEntries.insert(std::pair<const char*, uint>("/NET/WIFI/APP/http_proxy_svr", 0x141E8002));
RegistryEntries.insert(std::pair<const char*, uint>("/NET/WIFI/APP/http_proxy_port", 0x141E8003));
RegistryEntries.insert(std::pair<const char*, uint>("/NET/AOSS", 0x14230000));
RegistryEntries.insert(std::pair<const char*, uint>("/NET/AOSS/wpa_aes_ssid", 0x14230100));
RegistryEntries.insert(std::pair<const char*, uint>("/NET/AOSS/wpa_tkip_ssid", 0x14230200));
RegistryEntries.insert(std::pair<const char*, uint>("/NET/AOSS/wep128_ssid", 0x14230300));
RegistryEntries.insert(std::pair<const char*, uint>("/NET/AOSS/wep64_ssid", 0x14230400));
RegistryEntries.insert(std::pair<const char*, uint>("/NET/AOSS/wpa_aes_key", 0x14230500));
RegistryEntries.insert(std::pair<const char*, uint>("/NET/AOSS/wpa_tkip_key", 0x14230600));
RegistryEntries.insert(std::pair<const char*, uint>("/NET/AOSS/wep128_key", 0x14230700));
RegistryEntries.insert(std::pair<const char*, uint>("/NET/AOSS/wep64_key", 0x14230800));
RegistryEntries.insert(std::pair<const char*, uint>("/NET/AOSS/5G", 0x14234000));
RegistryEntries.insert(std::pair<const char*, uint>("/NET/AOSS/5G/wep64_ssid", 0x14234001));
RegistryEntries.insert(std::pair<const char*, uint>("/NET/AOSS/5G/wep64_key", 0x14234002));
RegistryEntries.insert(std::pair<const char*, uint>("/NET/AOSS/5G/wep128_ssid", 0x14234003));
RegistryEntries.insert(std::pair<const char*, uint>("/NET/AOSS/5G/wep128_key", 0x14234004));
RegistryEntries.insert(std::pair<const char*, uint>("/NET/AOSS/5G/wpa_tkip_ssid", 0x14234005));
RegistryEntries.insert(std::pair<const char*, uint>("/NET/AOSS/5G/wpa_tkip_key", 0x14234006));
RegistryEntries.insert(std::pair<const char*, uint>("/NET/AOSS/5G/wpa_aes_ssid", 0x14234007));
RegistryEntries.insert(std::pair<const char*, uint>("/NET/AOSS/5G/wpa_aes_key", 0x14234008));
RegistryEntries.insert(std::pair<const char*, uint>("/NET/APP", 0x14280000));
RegistryEntries.insert(std::pair<const char*, uint>("/NET/APP/http_proxy_flag", 0x14280100));
RegistryEntries.insert(std::pair<const char*, uint>("/NET/APP/http_proxy_svr", 0x14280200));
RegistryEntries.insert(std::pair<const char*, uint>("/NET/APP/http_proxy_port", 0x14280300));
RegistryEntries.insert(std::pair<const char*, uint>("/NET/APP/ssl_cert_ignore", 0x14288000));
RegistryEntries.insert(std::pair<const char*, uint>("/NET/APP/ssl_psn_trace", 0x14288100));
RegistryEntries.insert(std::pair<const char*, uint>("/NET/AP", 0x142D0000));
RegistryEntries.insert(std::pair<const char*, uint>("/NET/AP/ap_flag", 0x142D0100));
RegistryEntries.insert(std::pair<const char*, uint>("/NET/AP/ssid", 0x142D0200));
RegistryEntries.insert(std::pair<const char*, uint>("/NET/AP/wpa_key", 0x142D0300));
RegistryEntries.insert(std::pair<const char*, uint>("/NET/AP/channel", 0x142D0400));
RegistryEntries.insert(std::pair<const char*, uint>("/NET/GAME_AP", 0x142E0000));
RegistryEntries.insert(std::pair<const char*, uint>("/NET/GAME_AP/wpa_key", 0x142E0100));
RegistryEntries.insert(std::pair<const char*, uint>("/NET/GAME_AP/wpa_key_for_qa", 0x142E0200));
RegistryEntries.insert(std::pair<const char*, uint>("/NET", 0x14000000));
RegistryEntries.insert(std::pair<const char*, uint>("/NET/dbg_ip_address", 0x14700000));
RegistryEntries.insert(std::pair<const char*, uint>("/NET/dbg_netmask", 0x14710000));
RegistryEntries.insert(std::pair<const char*, uint>("/NET/dbg_route", 0x14740000));
RegistryEntries.insert(std::pair<const char*, uint>("/NET/dbg_route_mask", 0x14750000));
RegistryEntries.insert(std::pair<const char*, uint>("/NET/dbg_gateway", 0x14760000));
RegistryEntries.insert(std::pair<const char*, uint>("/NET/dbg_ip_config", 0x14770000));
RegistryEntries.insert(std::pair<const char*, uint>("/NET/dbg_dhcp_hname", 0x14780000));
RegistryEntries.insert(std::pair<const char*, uint>("/NET/emulation_type", 0x14790000));
RegistryEntries.insert(std::pair<const char*, uint>("/NET/always_lan", 0x147A0000));
RegistryEntries.insert(std::pair<const char*, uint>("/NP", 0x19000000));
RegistryEntries.insert(std::pair<const char*, uint>("/NP/patch_auto_dl", 0x19010000));
RegistryEntries.insert(std::pair<const char*, uint>("/NP/cache_pssdc", 0x19020000));
RegistryEntries.insert(std::pair<const char*, uint>("/NP/env", 0x19800000));
RegistryEntries.insert(std::pair<const char*, uint>("/NP/debug", 0x19810000));
RegistryEntries.insert(std::pair<const char*, uint>("/NP/test_patch", 0x19820000));
RegistryEntries.insert(std::pair<const char*, uint>("/NP/tpps_proxy_flag", 0x19830000));
RegistryEntries.insert(std::pair<const char*, uint>("/NP/tpps_proxy_svr", 0x19840000));
RegistryEntries.insert(std::pair<const char*, uint>("/NP/tpps_proxy_port", 0x19850000));
RegistryEntries.insert(std::pair<const char*, uint>("/NP/tpps_proxy_user", 0x19860000));
RegistryEntries.insert(std::pair<const char*, uint>("/NP/tpps_proxy_pwd", 0x19870000));
RegistryEntries.insert(std::pair<const char*, uint>("/NP/dbg_upgradable", 0x19880000));
RegistryEntries.insert(std::pair<const char*, uint>("/NP/fake_plus", 0x19890000));
RegistryEntries.insert(std::pair<const char*, uint>("/NP/dbg_commerce", 0x198A0000));
RegistryEntries.insert(std::pair<const char*, uint>("/NP/quick_signup_pw", 0x198B0000));
RegistryEntries.insert(std::pair<const char*, uint>("/NP/geo_filtering", 0x198C0000));
RegistryEntries.insert(std::pair<const char*, uint>("/NP/trophy_debug", 0x198D0000));
RegistryEntries.insert(std::pair<const char*, uint>("/NP/ignore_fakerif", 0x198E0000));
RegistryEntries.insert(std::pair<const char*, uint>("/NP/patch_check", 0x198F0000));
RegistryEntries.insert(std::pair<const char*, uint>("/NP/dbg_videosrv", 0x19900000));
RegistryEntries.insert(std::pair<const char*, uint>("/NP/sf_debug", 0x19910000));
RegistryEntries.insert(std::pair<const char*, uint>("/NP/fake_ratelimit", 0x19930000));
RegistryEntries.insert(std::pair<const char*, uint>("/NP/ignore_titleid", 0x19940000));
RegistryEntries.insert(std::pair<const char*, uint>("/NP/npdrm_debug_log", 0x19950000));
RegistryEntries.insert(std::pair<const char*, uint>("/NP/npdrm_debug_ntf", 0x19960000));
RegistryEntries.insert(std::pair<const char*, uint>("/NP/sslchk_secure", 0x19970000));
RegistryEntries.insert(std::pair<const char*, uint>("/NP/sslchk_liveitem", 0x19980000));
RegistryEntries.insert(std::pair<const char*, uint>("/NP/plus_recheck", 0x19990000));
RegistryEntries.insert(std::pair<const char*, uint>("/NP/regicam_url", 0x199A0000));
RegistryEntries.insert(std::pair<const char*, uint>("/NP/manifest_url", 0x199B0000));
RegistryEntries.insert(std::pair<const char*, uint>("/NP/per_act_sync", 0x199C0000));
RegistryEntries.insert(std::pair<const char*, uint>("/NP/geo_location", 0x199D0000));
RegistryEntries.insert(std::pair<const char*, uint>("/NP/ev_fake_clock", 0x199E0000));
RegistryEntries.insert(std::pair<const char*, uint>("/NP/dailymotion_lng", 0x199F0000));
RegistryEntries.insert(std::pair<const char*, uint>("/NP/diskcache_quota", 0x19A00000));
RegistryEntries.insert(std::pair<const char*, uint>("/NP/fake_dispname", 0x19A10000));
RegistryEntries.insert(std::pair<const char*, uint>("/NP/deathstar_url", 0x19A30000));
RegistryEntries.insert(std::pair<const char*, uint>("/NP/ds_family_url", 0x19A40000));
RegistryEntries.insert(std::pair<const char*, uint>("/NP/fake_version", 0x19A50000));
RegistryEntries.insert(std::pair<const char*, uint>("/CAMERA", 0x1E000000));
RegistryEntries.insert(std::pair<const char*, uint>("/CAMERA/camera_hw_info", 0x1E010000));
RegistryEntries.insert(std::pair<const char*, uint>("/CAMERA/mute_mic", 0x1E020000));
RegistryEntries.insert(std::pair<const char*, uint>("/VRTRACKER", 0x20000000));
RegistryEntries.insert(std::pair<const char*, uint>("/VRTRACKER/vrtracker_info", 0x20010000));
RegistryEntries.insert(std::pair<const char*, uint>("/VRTRACKER/telemetry", 0x20400000));
RegistryEntries.insert(std::pair<const char*, uint>("/VRTRACKER/vision_mgr_if", 0x20410000));
RegistryEntries.insert(std::pair<const char*, uint>("/VRTRACKER/green_ds4_track", 0x20800000));
RegistryEntries.insert(std::pair<const char*, uint>("/BDDVD", 0x23000000));
RegistryEntries.insert(std::pair<const char*, uint>("/BDDVD/bd_menu_lang", 0x23010000));
RegistryEntries.insert(std::pair<const char*, uint>("/BDDVD/bd_sound_lang", 0x23020000));
RegistryEntries.insert(std::pair<const char*, uint>("/BDDVD/bd_cap_lang", 0x23030000));
RegistryEntries.insert(std::pair<const char*, uint>("/BDDVD/nr", 0x23040000));
RegistryEntries.insert(std::pair<const char*, uint>("/BDDVD/display_mode", 0x23050000));
RegistryEntries.insert(std::pair<const char*, uint>("/BDDVD/hd50hz_output", 0x23060000));
RegistryEntries.insert(std::pair<const char*, uint>("/BDDVD/drc", 0x23070000));
RegistryEntries.insert(std::pair<const char*, uint>("/BDDVD/bd_audio_mix", 0x23080000));
RegistryEntries.insert(std::pair<const char*, uint>("/BDDVD/network_connect", 0x23090000));
RegistryEntries.insert(std::pair<const char*, uint>("/BDDVD/dvd_menu_lang", 0x230A0000));
RegistryEntries.insert(std::pair<const char*, uint>("/BDDVD/dvd_sound_lang", 0x230B0000));
RegistryEntries.insert(std::pair<const char*, uint>("/BDDVD/dvd_cap_lang", 0x230C0000));
RegistryEntries.insert(std::pair<const char*, uint>("/BDDVD/sound_format", 0x230D0000));
RegistryEntries.insert(std::pair<const char*, uint>("/BDDVD/s3d_on_hmd", 0x230E0000));
RegistryEntries.insert(std::pair<const char*, uint>("/BDDVD/flag", 0x230F0000));
RegistryEntries.insert(std::pair<const char*, uint>("/EVENT", 0x2A000000));
RegistryEntries.insert(std::pair<const char*, uint>("/EVENT/auto_boot_tick", 0x2A010000));
RegistryEntries.insert(std::pair<const char*, uint>("/GLS", 0x32000000));
RegistryEntries.insert(std::pair<const char*, uint>("/GLS/bc_mode", 0x32010000));
RegistryEntries.insert(std::pair<const char*, uint>("/GLS/social_mode", 0x32020000));
RegistryEntries.insert(std::pair<const char*, uint>("/GLS/broadcast_url", 0x32030000));
RegistryEntries.insert(std::pair<const char*, uint>("/GLS/rpin", 0x320C0000));
RegistryEntries.insert(std::pair<const char*, uint>("/GLS/irc_url", 0x32810000));
RegistryEntries.insert(std::pair<const char*, uint>("/GLS/irc_channel", 0x32820000));
RegistryEntries.insert(std::pair<const char*, uint>("/GLS/irc_user", 0x32830000));
RegistryEntries.insert(std::pair<const char*, uint>("/GLS/irc_passwd", 0x32840000));
RegistryEntries.insert(std::pair<const char*, uint>("/GLS/sf_latency", 0x32850000));
RegistryEntries.insert(std::pair<const char*, uint>("/GLS/debug_info_url", 0x32870000));
RegistryEntries.insert(std::pair<const char*, uint>("/GLS/emb_svr_ur", 0x32880000));
RegistryEntries.insert(std::pair<const char*, uint>("/GLS/live_quality_d", 0x32890000));
RegistryEntries.insert(std::pair<const char*, uint>("/SHARE", 0x37000000));
RegistryEntries.insert(std::pair<const char*, uint>("/SHARE/sound_mix", 0x37050000));
RegistryEntries.insert(std::pair<const char*, uint>("/SHARE/rec_prohibit", 0x37060000));
RegistryEntries.insert(std::pair<const char*, uint>("/SHARE/ctr_share_test", 0x37070000));
RegistryEntries.insert(std::pair<const char*, uint>("/SHARE/cpy_share_item", 0x37080000));
RegistryEntries.insert(std::pair<const char*, uint>("/SHARE/rec_time", 0x37090000));
RegistryEntries.insert(std::pair<const char*, uint>("/SHARE/status", 0x370A0000));
RegistryEntries.insert(std::pair<const char*, uint>("/SHARE/ctr_share_range", 0x37800000));
RegistryEntries.insert(std::pair<const char*, uint>("/SHARE/title_check", 0x37810000));
RegistryEntries.insert(std::pair<const char*, uint>("/SHARE/ctr_share_save", 0x37820000));
RegistryEntries.insert(std::pair<const char*, uint>("/SHAREFACTORY", 0x39000000));
RegistryEntries.insert(std::pair<const char*, uint>("/SHAREFACTORY/direct_boot_id", 0x39010000));
RegistryEntries.insert(std::pair<const char*, uint>("/BROWSER", 0x3C000000));
RegistryEntries.insert(std::pair<const char*, uint>("/BROWSER/enable_cookie", 0x3C020000));
RegistryEntries.insert(std::pair<const char*, uint>("/BROWSER/enable_js", 0x3C030000));
RegistryEntries.insert(std::pair<const char*, uint>("/BROWSER/check_signup", 0x3C040000));
RegistryEntries.insert(std::pair<const char*, uint>("/BROWSER/DEBUG", 0x3CC80000));
RegistryEntries.insert(std::pair<const char*, uint>("/BROWSER/DEBUG/calist_loadmode", 0x3CC80100));
RegistryEntries.insert(std::pair<const char*, uint>("/BROWSER/DEBUG/verify_ssl", 0x3CC80200));
RegistryEntries.insert(std::pair<const char*, uint>("/BROWSER/DEBUG/dfg_jit_enabled", 0x3CC80300));
RegistryEntries.insert(std::pair<const char*, uint>("/BROWSER/DEBUG/net_dbg_config", 0x3CC80400));
RegistryEntries.insert(std::pair<const char*, uint>("/BROWSER/DEBUG/check_iframe", 0x3CC80500));
RegistryEntries.insert(std::pair<const char*, uint>("/BROWSER/DEBUG/enable_jslog", 0x3CC80600));
RegistryEntries.insert(std::pair<const char*, uint>("/BROWSER/DEBUG/notification", 0x3CC80700));
RegistryEntries.insert(std::pair<const char*, uint>("/REMOTEPLAY", 0x41000000));
RegistryEntries.insert(std::pair<const char*, uint>("/REMOTEPLAY/rp_enable", 0x41810000));
RegistryEntries.insert(std::pair<const char*, uint>("/REMOTEPLAY/ap_flag", 0x41820000));
RegistryEntries.insert(std::pair<const char*, uint>("/REMOTEPLAY/log_enable", 0x41C00000));
RegistryEntries.insert(std::pair<const char*, uint>("/SHAREPLAY", 0x44000000));
RegistryEntries.insert(std::pair<const char*, uint>("/SHAREPLAY/mode", 0x44800000));
RegistryEntries.insert(std::pair<const char*, uint>("/SHAREPLAY/ip_direct", 0x44810000));
RegistryEntries.insert(std::pair<const char*, uint>("/SHAREPLAY/resolution", 0x44820000));
RegistryEntries.insert(std::pair<const char*, uint>("/SHAREPLAY/bitrate", 0x44830000));
RegistryEntries.insert(std::pair<const char*, uint>("/SHAREPLAY/framerate", 0x44840000));
RegistryEntries.insert(std::pair<const char*, uint>("/SHAREPLAY/quality_graph", 0x44850000));
RegistryEntries.insert(std::pair<const char*, uint>("/SHAREPLAY/ephemeral_port", 0x44860000));
RegistryEntries.insert(std::pair<const char*, uint>("/SHAREPLAY/pcl_check", 0x44870000));
RegistryEntries.insert(std::pair<const char*, uint>("/SHAREPLAY/store_check", 0x44880000));
RegistryEntries.insert(std::pair<const char*, uint>("/SHAREPLAY/age_check", 0x44890000));
RegistryEntries.insert(std::pair<const char*, uint>("/SHAREPLAY/gav_check", 0x448A0000));
RegistryEntries.insert(std::pair<const char*, uint>("/SHAREPLAY/fake_time_limit", 0x448B0000));
RegistryEntries.insert(std::pair<const char*, uint>("/PARTY", 0x45000000));
RegistryEntries.insert(std::pair<const char*, uint>("/PARTY/volume_down", 0x45010000));
RegistryEntries.insert(std::pair<const char*, uint>("/PARTY/voice_priority", 0x45020000));
RegistryEntries.insert(std::pair<const char*, uint>("/PARTY/upstream_bandw", 0x45030000));
RegistryEntries.insert(std::pair<const char*, uint>("/PLAYTOGETHER", 0x55000000));
RegistryEntries.insert(std::pair<const char*, uint>("/PLAYTOGETHER/game_played", 0x55010000));
RegistryEntries.insert(std::pair<const char*, uint>("/SYSCORE", 0x5A000000));
RegistryEntries.insert(std::pair<const char*, uint>("/SYSCORE/shell_watch_dog", 0x5A020000));
RegistryEntries.insert(std::pair<const char*, uint>("/COMPANION", 0x64000000));
RegistryEntries.insert(std::pair<const char*, uint>("/COMPANION/dbg_launch_mode", 0x64010000));
RegistryEntries.insert(std::pair<const char*, uint>("/COMPANION/dbg_ip_chk_flg", 0x64020000));
RegistryEntries.insert(std::pair<const char*, uint>("/COMPANION/user_bind_mode", 0x64030000));
RegistryEntries.insert(std::pair<const char*, uint>("/MUSIC/MUSIC/APP", 0x46010000));
RegistryEntries.insert(std::pair<const char*, uint>("/MUSIC/MUSIC/APP/repeat_mode", 0x46010100));
RegistryEntries.insert(std::pair<const char*, uint>("/MUSIC/MUSIC/APP/shuffle_mode", 0x46010200));
RegistryEntries.insert(std::pair<const char*, uint>("/MUSIC/MUSIC/APP/audio_balance", 0x46010300));
RegistryEntries.insert(std::pair<const char*, uint>("/VIDEOPLAYER", 0x49000000));
RegistryEntries.insert(std::pair<const char*, uint>("/VIDEOPLAYER/1080_24p", 0x49010000));
RegistryEntries.insert(std::pair<const char*, uint>("/VIDEOPLAYER/CC", 0x49020000));
RegistryEntries.insert(std::pair<const char*, uint>("/VIDEOPLAYER/CC/enable_cc", 0x49020100));
RegistryEntries.insert(std::pair<const char*, uint>("/VIDEOPLAYER/CC/content_specifi", 0x49020200));
RegistryEntries.insert(std::pair<const char*, uint>("/VIDEOPLAYER/CC/char_color", 0x49020300));
RegistryEntries.insert(std::pair<const char*, uint>("/VIDEOPLAYER/CC/char_opacity", 0x49020400));
RegistryEntries.insert(std::pair<const char*, uint>("/VIDEOPLAYER/CC/char_size", 0x49020500));
RegistryEntries.insert(std::pair<const char*, uint>("/VIDEOPLAYER/CC/font_type", 0x49020600));
RegistryEntries.insert(std::pair<const char*, uint>("/VIDEOPLAYER/CC/char_edge", 0x49020700));
RegistryEntries.insert(std::pair<const char*, uint>("/VIDEOPLAYER/CC/char_edge_color", 0x49020800));
RegistryEntries.insert(std::pair<const char*, uint>("/VIDEOPLAYER/CC/char_bg_color", 0x49020900));
RegistryEntries.insert(std::pair<const char*, uint>("/VIDEOPLAYER/CC/char_bg_opacity", 0x49020A00));
RegistryEntries.insert(std::pair<const char*, uint>("/VIDEOPLAYER/CC/window_color", 0x49020B00));
RegistryEntries.insert(std::pair<const char*, uint>("/VIDEOPLAYER/CC/window_opacity", 0x49020C00));
RegistryEntries.insert(std::pair<const char*, uint>("/VIDEOEDIT", 0x4B000000));
RegistryEntries.insert(std::pair<const char*, uint>("/VIDEOEDIT/first_time_act", 0x4B010000));
RegistryEntries.insert(std::pair<const char*, uint>("/MUSICUNLIMITED", 0x4E000000));
RegistryEntries.insert(std::pair<const char*, uint>("/MUSICUNLIMITED/debug_url", 0x4E800000));
RegistryEntries.insert(std::pair<const char*, uint>("/PRJSP", 0x4F000000));
RegistryEntries.insert(std::pair<const char*, uint>("/PRJSP/app_installed", 0x4F010000));
RegistryEntries.insert(std::pair<const char*, uint>("/PRJSP/enable_zeroconf", 0x4F800000));
RegistryEntries.insert(std::pair<const char*, uint>("/PLAYGO", 0x50000000));
RegistryEntries.insert(std::pair<const char*, uint>("/PLAYGO/content_id", 0x50010000));
RegistryEntries.insert(std::pair<const char*, uint>("/PLAYGO/package_url", 0x50020000));
RegistryEntries.insert(std::pair<const char*, uint>("/PLAYGO/scenario_id", 0x50030000));
RegistryEntries.insert(std::pair<const char*, uint>("/PLAYGO/dl_content_id", 0x50040000));
RegistryEntries.insert(std::pair<const char*, uint>("/PLAYGO/auto_download", 0x50050000));
RegistryEntries.insert(std::pair<const char*, uint>("/PLAYGO/json_url", 0x50060000));
RegistryEntries.insert(std::pair<const char*, uint>("/PLAYGO/package_ex_url", 0x50070000));
RegistryEntries.insert(std::pair<const char*, uint>("/MORPHEUS/VR2D", 0x50400000));
RegistryEntries.insert(std::pair<const char*, uint>("/MORPHEUS/VR2D/gyro_bias", 0x50400100));
RegistryEntries.insert(std::pair<const char*, uint>("/MORPHEUS/UPDATE", 0x58600000));
RegistryEntries.insert(std::pair<const char*, uint>("/MORPHEUS/UPDATE/server_url", 0x58600100));
RegistryEntries.insert(std::pair<const char*, uint>("/MORPHEUS/UPDATE/enable_upd_chk", 0x58600200));
RegistryEntries.insert(std::pair<const char*, uint>("/MORPHEUS/DEBUG", 0x58800000));
RegistryEntries.insert(std::pair<const char*, uint>("/MORPHEUS/DEBUG/demo_mode", 0x58800100));
RegistryEntries.insert(std::pair<const char*, uint>("/MORPHEUS/DEBUG/debug_mode", 0x58800200));
RegistryEntries.insert(std::pair<const char*, uint>("/MORPHEUS/DEBUG/social_screen", 0x58800300));
RegistryEntries.insert(std::pair<const char*, uint>("/MORPHEUS/DEBUG/debug_text", 0x58800400));
RegistryEntries.insert(std::pair<const char*, uint>("/MORPHEUS/DEBUG/ex_mode_chat", 0x58800500));
RegistryEntries.insert(std::pair<const char*, uint>("/MORPHEUS/DEBUG/show_tutorials", 0x58800600));
RegistryEntries.insert(std::pair<const char*, uint>("/MORPHEUS/DEBUG/hmu_auto_detect", 0x58800700));
RegistryEntries.insert(std::pair<const char*, uint>("/MORPHEUS/DEBUG/show_safe_area", 0x58800800));
RegistryEntries.insert(std::pair<const char*, uint>("/MORPHEUS/DEBUG/play_area_warn", 0x58800900));
RegistryEntries.insert(std::pair<const char*, uint>("/MORPHEUS/DEBUG/ignore_separate", 0x58800A00));
RegistryEntries.insert(std::pair<const char*, uint>("/MORPHEUS/DEBUG/dbg_launch_mode", 0x58800B00));
RegistryEntries.insert(std::pair<const char*, uint>("/MORPHEUS/DEBUG/vr_capture", 0x58800C00));
RegistryEntries.insert(std::pair<const char*, uint>("/COREDUMP", 0x6E000000));
RegistryEntries.insert(std::pair<const char*, uint>("/COREDUMP/dump_mode", 0x6E010000));
RegistryEntries.insert(std::pair<const char*, uint>("/COREDUMP/internal_mode", 0x6E020000));
RegistryEntries.insert(std::pair<const char*, uint>("/COREDUMP/always_enc_dump", 0x6E030000));
RegistryEntries.insert(std::pair<const char*, uint>("/COREDUMP/dump_level", 0x6E040000));
RegistryEntries.insert(std::pair<const char*, uint>("/COREDUMP/video_duration", 0x6E060000));
RegistryEntries.insert(std::pair<const char*, uint>("/COREDUMP/video_bitrate", 0x6E070000));
RegistryEntries.insert(std::pair<const char*, uint>("/COREDUMP/sys_dump_level", 0x6E080000));
RegistryEntries.insert(std::pair<const char*, uint>("/COREDUMP/gpudump", 0x6E090000));
RegistryEntries.insert(std::pair<const char*, uint>("/COREDUMP/screenshot", 0x6E0A0000));
RegistryEntries.insert(std::pair<const char*, uint>("/COREDUMP/UPLOADER", 0x6E800000));
RegistryEntries.insert(std::pair<const char*, uint>("/COREDUMP/UPLOADER/enable_uploader", 0x6E800100));
RegistryEntries.insert(std::pair<const char*, uint>("/COREDUMP/UPLOADER/uploader_url", 0x6E800200));
RegistryEntries.insert(std::pair<const char*, uint>("/COREDUMP/UPLOADER/auto_upload", 0x6E800300));
RegistryEntries.insert(std::pair<const char*, uint>("/CRASHREPORTING", 0x70000000));
RegistryEntries.insert(std::pair<const char*, uint>("/CRASHREPORTING/enable_report", 0x70010000));
RegistryEntries.insert(std::pair<const char*, uint>("/CRASHREPORTING/keep_corefiles", 0x70020000));
RegistryEntries.insert(std::pair<const char*, uint>("/CRASHREPORTING/autosending", 0x70030000));
RegistryEntries.insert(std::pair<const char*, uint>("/CRASHREPORTING/operatestatus", 0x70040000));
RegistryEntries.insert(std::pair<const char*, uint>("/CRASHREPORTING/attachvideoclip", 0x70050000));
RegistryEntries.insert(std::pair<const char*, uint>("/CRASHREPORTING/qa_auto_send", 0x70060000));
RegistryEntries.insert(std::pair<const char*, uint>("/CRASHREPORTING/fake_optload", 0x70070000));
RegistryEntries.insert(std::pair<const char*, uint>("/CRASHREPORTING/fake_cfss", 0x70080000));
RegistryEntries.insert(std::pair<const char*, uint>("/CRASHREPORTING/set_task_title", 0x700A0000));
RegistryEntries.insert(std::pair<const char*, uint>("/SYSTEMLOGGER/PLATFORMPRIVACY", 0x73010000));
RegistryEntries.insert(std::pair<const char*, uint>("/SYSTEMLOGGER/PLATFORMPRIVACY/last_mod_bi", 0x73010100));
RegistryEntries.insert(std::pair<const char*, uint>("/SYSTEMLOGGER/PLATFORMPRIVACY/last_mod_tel", 0x73010200));
RegistryEntries.insert(std::pair<const char*, uint>("/SYSTEMLOGGER/PLATFORMPRIVACY/last_mod_kmg", 0x73010300));
RegistryEntries.insert(std::pair<const char*, uint>("/SYSTEMLOGGER/PLATFORMPRIVACY/last_cfm_bi", 0x73010400));
RegistryEntries.insert(std::pair<const char*, uint>("/SYSTEMLOGGER/PLATFORMPRIVACY/last_cfm_tel", 0x73010500));
RegistryEntries.insert(std::pair<const char*, uint>("/SYSTEMLOGGER/PLATFORMPRIVACY/last_cfm_kmg", 0x73010600));
RegistryEntries.insert(std::pair<const char*, uint>("/SYSTEMLOGGER/DEBUG", 0x73800000));
RegistryEntries.insert(std::pair<const char*, uint>("/SYSTEMLOGGER/DEBUG/config_dir", 0x73800100));
RegistryEntries.insert(std::pair<const char*, uint>("/SYSTEMLOGGER/DEBUG/user_time", 0x73800200));
RegistryEntries.insert(std::pair<const char*, uint>("/SYSTEMLOGGER/DEBUG/click_through", 0x73800300));
RegistryEntries.insert(std::pair<const char*, uint>("/SYSTEMLOGGER/DEBUG/dummy_aws", 0x73800400));
RegistryEntries.insert(std::pair<const char*, uint>("/SYSTEMLOGGER/DEBUG/debug_message", 0x73800500));
RegistryEntries.insert(std::pair<const char*, uint>("/SYSTEMLOGGER/DEBUG/config_dir2", 0x73800600));
RegistryEntries.insert(std::pair<const char*, uint>("/SYSTEMLOGGER/DEBUG/config_dir3", 0x73800800));
RegistryEntries.insert(std::pair<const char*, uint>("/SYSTEMLOGGER/DEBUG/delivery_mode", 0x73800900));
RegistryEntries.insert(std::pair<const char*, uint>("/SYSTEMLOGGER/DEBUG/delivery_url", 0x73800A00));
RegistryEntries.insert(std::pair<const char*, uint>("/SYSTEMLOGGER/DEBUG/pri_def_dir", 0x73800B00));
RegistryEntries.insert(std::pair<const char*, uint>("/SYSTEMLOGGER/DEBUG/pri_def_dir2", 0x73800C00));
RegistryEntries.insert(std::pair<const char*, uint>("/SYSTEMLOGGER/DEBUG/pri_def_dir3", 0x73800D00));
RegistryEntries.insert(std::pair<const char*, uint>("/PSCLOUD", 0x76000000));
RegistryEntries.insert(std::pair<const char*, uint>("/PSCLOUD/gf_version", 0x76010000));
RegistryEntries.insert(std::pair<const char*, uint>("/PSCLOUD/gko_sdk_version", 0x76020000));
RegistryEntries.insert(std::pair<const char*, uint>("/FS/UFS", 0xC0800000));
RegistryEntries.insert(std::pair<const char*, uint>("/FS/UFS/compat_pkg", 0xC0808000));
RegistryEntries.insert(std::pair<const char*, uint>("/FS/UFS/compat_pkg_mode", 0xC0808100));
RegistryEntries.insert(std::pair<const char*, uint>("/FS/GAME_PROC", 0xC0880000));
RegistryEntries.insert(std::pair<const char*, uint>("/FS/GAME_PROC/nolmt_pe_sldata", 0xC0888000));
RegistryEntries.insert(std::pair<const char*, uint>("/DEVENV/HOST", 0x78010000));
RegistryEntries.insert(std::pair<const char*, uint>("/DEVENV/HOST/devkitname", 0x78010100));
RegistryEntries.insert(std::pair<const char*, uint>("/DEVENV/HOST/host_internal", 0x78010200));
RegistryEntries.insert(std::pair<const char*, uint>("/DEVENV/TOOL", 0x78020000));
RegistryEntries.insert(std::pair<const char*, uint>("/DEVENV/TOOL/dl_debug_flags", 0x78020100));
RegistryEntries.insert(std::pair<const char*, uint>("/DEVENV/TOOL/region_masq", 0x78020200));
RegistryEntries.insert(std::pair<const char*, uint>("/DEVENV/TOOL/boot_param", 0x78020300));
RegistryEntries.insert(std::pair<const char*, uint>("/DEVENV/TOOL/gpi00", 0x78020400));
RegistryEntries.insert(std::pair<const char*, uint>("/DEVENV/TOOL/preload_chk_off", 0x78020500));
RegistryEntries.insert(std::pair<const char*, uint>("/DEVENV/TOOL/trc_notify", 0x78026400));
RegistryEntries.insert(std::pair<const char*, uint>("/DEVENV/TOOL/sysdl_from_host", 0x78028100));
RegistryEntries.insert(std::pair<const char*, uint>("/DEVENV/TOOL/preserve_dmem", 0x78028200));
RegistryEntries.insert(std::pair<const char*, uint>("/DEVENV/TOOL/use_default_lib", 0x78028300));
RegistryEntries.insert(std::pair<const char*, uint>("/DEVENV/TOOL/dev_auto_assign", 0x78028400));
RegistryEntries.insert(std::pair<const char*, uint>("/DEVENV/TOOL/razor_gpu", 0x78028600));
RegistryEntries.insert(std::pair<const char*, uint>("/DEVENV/TOOL/pa_debug", 0x78028B00));
RegistryEntries.insert(std::pair<const char*, uint>("/DEVENV/TOOL/gpu_validate", 0x78028C00));
RegistryEntries.insert(std::pair<const char*, uint>("/DEVENV/TOOL/system_load", 0x78028D00));
RegistryEntries.insert(std::pair<const char*, uint>("/DEVENV/TOOL/sys_prx_preload", 0x78028A00));
RegistryEntries.insert(std::pair<const char*, uint>("/DEVENV/TOOL/reg_not_save", 0x78028800));
RegistryEntries.insert(std::pair<const char*, uint>("/DEVENV/TOOL/use_dev_login", 0x78028900));
RegistryEntries.insert(std::pair<const char*, uint>("/DEVENV/TOOL/appsuspend_test", 0x7802A000));
RegistryEntries.insert(std::pair<const char*, uint>("/DEVENV/TOOL/pad_connection", 0x7802A100));
RegistryEntries.insert(std::pair<const char*, uint>("/DEVENV/TOOL/mbus_mode", 0x7802A200));
RegistryEntries.insert(std::pair<const char*, uint>("/DEVENV/TOOL/force_use_cam", 0x7802A300));
RegistryEntries.insert(std::pair<const char*, uint>("/DEVENV/TOOL/host_overlay", 0x7802A400));
RegistryEntries.insert(std::pair<const char*, uint>("/DEVENV/TOOL/pscode_masq", 0x7802A500));
RegistryEntries.insert(std::pair<const char*, uint>("/DEVENV/TOOL/submit_done_exc", 0x7802A600));
RegistryEntries.insert(std::pair<const char*, uint>("/DEVENV/TOOL/shutdown_debug", 0x7802A700));
RegistryEntries.insert(std::pair<const char*, uint>("/DEVENV/TOOL/shell_debug", 0x7802A900));
RegistryEntries.insert(std::pair<const char*, uint>("/DEVENV/TOOL/postmortem", 0x7802AA00));
RegistryEntries.insert(std::pair<const char*, uint>("/DEVENV/TOOL/pad_auto_detect", 0x7802AB00));
RegistryEntries.insert(std::pair<const char*, uint>("/DEVENV/TOOL/use_host_theme", 0x7802AC00));
RegistryEntries.insert(std::pair<const char*, uint>("/DEVENV/TOOL/compositor_dbg", 0x7802AD00));
RegistryEntries.insert(std::pair<const char*, uint>("/DEVENV/TOOL/vsh4k_rendering", 0x7802AE00));
RegistryEntries.insert(std::pair<const char*, uint>("/DEVENV/TOOL/theme_preview", 0x7802AF00));
RegistryEntries.insert(std::pair<const char*, uint>("/DEVENV/TOOL/submit_done", 0x7802B000));
RegistryEntries.insert(std::pair<const char*, uint>("/DEVENV/TOOL/force_gpu_idle", 0x7802B100));
RegistryEntries.insert(std::pair<const char*, uint>("/DEVENV/TOOL/qaflag_masq", 0x7802B200));
RegistryEntries.insert(std::pair<const char*, uint>("/DEVENV/TOOL/vsh_gpu_control", 0x7802B400));
RegistryEntries.insert(std::pair<const char*, uint>("/DEVENV/TOOL/multi_install", 0x7802B500));
RegistryEntries.insert(std::pair<const char*, uint>("/DEVENV/TOOL/game_heap_trace", 0x7802B700));
RegistryEntries.insert(std::pair<const char*, uint>("/DEVENV/TOOL/expose_under_2k", 0x7802B900));
RegistryEntries.insert(std::pair<const char*, uint>("/DEVENV/TOOL/fake_neo4k_mode", 0x7802BA00));
RegistryEntries.insert(std::pair<const char*, uint>("/DEVENV/TOOL/friendprof_f", 0x7802BB00));
RegistryEntries.insert(std::pair<const char*, uint>("/DEVENV/TOOL/ipmi_dbg_flags", 0x7802BC00));
RegistryEntries.insert(std::pair<const char*, uint>("/DEVENV/TOOL/loginmgr_debug", 0x7802BD00));
RegistryEntries.insert(std::pair<const char*, uint>("/DEVENV/TOOL/sys_heap_trace", 0x7802BE00));
RegistryEntries.insert(std::pair<const char*, uint>("/DEVENV/TOOL/game_intmem_dbg", 0x7802BF00));
RegistryEntries.insert(std::pair<const char*, uint>("/DEVENV/TOOL/sce_module_dbg", 0x7802C000));
RegistryEntries.insert(std::pair<const char*, uint>("/DEVENV/TOOL/piglet_rt_shdrc", 0x7802C100));
RegistryEntries.insert(std::pair<const char*, uint>("/DEVENV/TOOL/gc_halt", 0x7802C200));
RegistryEntries.insert(std::pair<const char*, uint>("/DEVENV/TOOL/asan_prog", 0x7802C300));
RegistryEntries.insert(std::pair<const char*, uint>("/DEVENV/TOOL/asan_option", 0x7802C400));
RegistryEntries.insert(std::pair<const char*, uint>("/DEVENV/TOOL/skip_modal_msg", 0x7802C500));
RegistryEntries.insert(std::pair<const char*, uint>("/DEVENV/TOOL/video_core_dbg", 0x7802C600));
RegistryEntries.insert(std::pair<const char*, uint>("/DEVENV/TOOL/dd_fake_trans", 0x7802C700));
RegistryEntries.insert(std::pair<const char*, uint>("/DEVENV/TOOL/SHELLCORE", 0x7802C800));
RegistryEntries.insert(std::pair<const char*, uint>("/DEVENV/TOOL/SHELLCORE/boot_disable", 0x7802C801));
RegistryEntries.insert(std::pair<const char*, uint>("/DEVENV/TOOL/SHELLCORE/pathname", 0x7802C802));
RegistryEntries.insert(std::pair<const char*, uint>("/DEVENV/TOOL/SHELLCORE/load_config", 0x7802C804));
RegistryEntries.insert(std::pair<const char*, uint>("/DEVENV/TOOL/SHELLCORE/host_standby_rq", 0x7802C805));
RegistryEntries.insert(std::pair<const char*, uint>("/DEVENV/TOOL/SHELLUI", 0x7802C900));
RegistryEntries.insert(std::pair<const char*, uint>("/DEVENV/TOOL/SHELLUI/debug_menu", 0x7802C901));
RegistryEntries.insert(std::pair<const char*, uint>("/DEVENV/TOOL/SHELLUI/screenshot", 0x7802C914));
RegistryEntries.insert(std::pair<const char*, uint>("/DEVENV/TOOL/SHELLUI/shell_crash", 0x7802C915));
RegistryEntries.insert(std::pair<const char*, uint>("/DEVENV/TOOL/SHELLUI/disp_titleid", 0x7802C916));
RegistryEntries.insert(std::pair<const char*, uint>("/DEVENV/TOOL/SHELLUI/content_info", 0x7802C9C8));
RegistryEntries.insert(std::pair<const char*, uint>("/DEVENV/TOOL/SHELLUI/webinspector", 0x7802C9C9));
RegistryEntries.insert(std::pair<const char*, uint>("/DEVENV/TOOL/SHELLUI/webprofile", 0x7802C9CA));
RegistryEntries.insert(std::pair<const char*, uint>("/DEVENV/TOOL/SHELLUI/webproxy", 0x7802C9CB));
RegistryEntries.insert(std::pair<const char*, uint>("/DEVENV/TOOL/SHELLUI/webpreference", 0x7802C9CC));
RegistryEntries.insert(std::pair<const char*, uint>("/DEVENV/TOOL/SHELLUI/fake_beta", 0x7802C9CD));
RegistryEntries.insert(std::pair<const char*, uint>("/DEVENV/TOOL/COMMONDIALOG", 0x7802CD00));
RegistryEntries.insert(std::pair<const char*, uint>("/DEVENV/TOOL/COMMONDIALOG/watch_dog", 0x7802CD01));
RegistryEntries.insert(std::pair<const char*, uint>("/DEVENV/TOOL/COMMONDIALOG/crash_test", 0x7802CD02));
RegistryEntries.insert(std::pair<const char*, uint>("/DEVENV/TOOL/COMMONDIALOG/suspendmode", 0x7802CD03));
RegistryEntries.insert(std::pair<const char*, uint>("/DEVENV/TOOL/KEYBOARD", 0x7802D200));
RegistryEntries.insert(std::pair<const char*, uint>("/DEVENV/TOOL/KEYBOARD/enable_pause", 0x7802D201));
RegistryEntries.insert(std::pair<const char*, uint>("/DEVENV/TOOL/KEYBOARD/enable_printsc", 0x7802D202));
RegistryEntries.insert(std::pair<const char*, uint>("/DEVENV/TOOL/VOICE_RECOG", 0x7802DC00));
RegistryEntries.insert(std::pair<const char*, uint>("/DEVENV/TOOL/VOICE_RECOG/auto_start", 0x7802DC01));
RegistryEntries.insert(std::pair<const char*, uint>("/DEVENV/TOOL/VOICE_RECOG/term_of_command", 0x7802DC02));
RegistryEntries.insert(std::pair<const char*, uint>("/DEVENV/TOOL/VOICE_RECOG/transition", 0x7802DC03));
RegistryEntries.insert(std::pair<const char*, uint>("/DEVENV/TOOL/VOICE_RECOG/recording_mode", 0x7802DC04));
RegistryEntries.insert(std::pair<const char*, uint>("/DEVENV/TOOL/MONO/DEBUG", 0x7802E600));
RegistryEntries.insert(std::pair<const char*, uint>("/DEVENV/TOOL/MONO/DEBUG/profiling", 0x7802E601));
RegistryEntries.insert(std::pair<const char*, uint>("/DEVENV/TOOL/MONO/DEBUG/trace", 0x7802E602));
RegistryEntries.insert(std::pair<const char*, uint>("/DEVENV/TOOL/MONO/DEBUG/trace_mask", 0x7802E603));
RegistryEntries.insert(std::pair<const char*, uint>("/DEVENV/TOOL/MONO/DEBUG/debug_option", 0x7802E604));
RegistryEntries.insert(std::pair<const char*, uint>("/DEVENV/TOOL/MONO/DEBUG/use_new_gc", 0x7802E605));
RegistryEntries.insert(std::pair<const char*, uint>("/DEVENV/TOOL/MONO/DEBUG/enable_full_aot", 0x7802E606));
RegistryEntries.insert(std::pair<const char*, uint>("/DEVENV/ACTIVATE", 0x78030000));
RegistryEntries.insert(std::pair<const char*, uint>("/DEVENV/ACTIVATE/auto_renewal", 0x78030100));
RegistryEntries.insert(std::pair<const char*, uint>("/DEVENV/ACTIVATE/prev_date", 0x78030200));
RegistryEntries.insert(std::pair<const char*, uint>("/DEVENV/ACTIVATE/prev_result", 0x78030300));
RegistryEntries.insert(std::pair<const char*, uint>("/DEVENV/QA", 0x78400000));
RegistryEntries.insert(std::pair<const char*, uint>("/DEVENV/QA/eapcrash", 0x78408000));
RegistryEntries.insert(std::pair<const char*, uint>("/DEVENV/QA/auto_test_type", 0x78408100));
RegistryEntries.insert(std::pair<const char*, uint>("/DEVENV/QA/error_masq", 0x78408200));
RegistryEntries.insert(std::pair<const char*, uint>("/DEVENV/QA/disable_bg_wave", 0x78408300));
RegistryEntries.insert(std::pair<const char*, uint>("/DEVENV/QA/enable_exthdd", 0x78408400));
RegistryEntries.insert(std::pair<const char*, uint>("/DEVENV/QA/intro_video_url", 0x78408600));
RegistryEntries.insert(std::pair<const char*, uint>("/DEVENV/QA/fake_exthddspec", 0x78408700));
RegistryEntries.insert(std::pair<const char*, uint>("/DEVENV/QA/enable_eu_ws1", 0x78408800));
RegistryEntries.insert(std::pair<const char*, uint>("/DEVENV/QA/GAME", 0x78400100));
RegistryEntries.insert(std::pair<const char*, uint>("/DEVENV/QA/GAME/sd_fake_space", 0x78400101));
RegistryEntries.insert(std::pair<const char*, uint>("/DEVENV/QA/GAME/sd_fake_owner", 0x78400102));
RegistryEntries.insert(std::pair<const char*, uint>("/DEVENV/QA/GAME/fake_finalized", 0x78400103));
RegistryEntries.insert(std::pair<const char*, uint>("/DEVENV/QA/GAME/bdcopy", 0x78400104));
RegistryEntries.insert(std::pair<const char*, uint>("/DEVENV/QA/GAME/ac_fake_space", 0x78400105));
RegistryEntries.insert(std::pair<const char*, uint>("/DEVENV/QA/GAME/sd_rebuild", 0x78400106));
RegistryEntries.insert(std::pair<const char*, uint>("/DEVENV/QA/GAME/vr_fake_space", 0x78400107));
RegistryEntries.insert(std::pair<const char*, uint>("/DEVENV/QA/GAME/store_country", 0x78400108));
RegistryEntries.insert(std::pair<const char*, uint>("/DEVENV/QA/GAME/sd_format", 0x7840010A));
RegistryEntries.insert(std::pair<const char*, uint>("/DEVENV/QA/GAME/skip_asm_for_ac", 0x7840010B));
RegistryEntries.insert(std::pair<const char*, uint>("/DEVENV/QA/GAME/game_rec_target", 0x7840010C));
RegistryEntries.insert(std::pair<const char*, uint>("/DEVENV/QA/GAME/game_rec_area", 0x7840010D));
RegistryEntries.insert(std::pair<const char*, uint>("/DEVENV/QA/GAME/game_rec_force", 0x7840010E));
RegistryEntries.insert(std::pair<const char*, uint>("/DEVENV/QA/GAME/dd_boot_block", 0x7840010F));
RegistryEntries.insert(std::pair<const char*, uint>("/DEVENV/QA/STANDBY", 0x78400200));
RegistryEntries.insert(std::pair<const char*, uint>("/DEVENV/QA/STANDBY/actest_pattern", 0x78400201));
RegistryEntries.insert(std::pair<const char*, uint>("/DEVENV/QA/STANDBY/actest_interval", 0x78400202));
RegistryEntries.insert(std::pair<const char*, uint>("/DEVENV/QA/POWERTEST", 0x78400300));
RegistryEntries.insert(std::pair<const char*, uint>("/DEVENV/QA/POWERTEST/navigation", 0x78400301));
RegistryEntries.insert(std::pair<const char*, uint>("/DEVENV/QA/POWERTEST/shell_mediaplay", 0x78400302));
RegistryEntries.insert(std::pair<const char*, uint>("/DEVENV/QA/POWERTEST/disc_player", 0x78400303));
RegistryEntries.insert(std::pair<const char*, uint>("/DEVENV/QA/POWERTEST/psvideo", 0x78400304));
Initialized = true;
}
if (RegistryEntries.find(Name) == RegistryEntries.end())
return -1;
else
return RegistryEntries[Name];
}
+3
View File
@@ -0,0 +1,3 @@
#pragma once
uint Registry_Find_By_Name(const char* Name);
+150
View File
@@ -0,0 +1,150 @@
#include "Common.h"
#include "SocketListener.h"
struct ClientThreadParams
{
SocketListener* socketListener;
OrbisNetId Sock;
};
void* SocketListener::ClientThread(void* tdParam)
{
ClientThreadParams* Params = (ClientThreadParams*)tdParam;
SocketListener* socketListener = Params->socketListener;
OrbisNetId Sock = Params->Sock;
socketListener->ClientCallBack(socketListener->tdParam, Sock);
sceNetSocketClose(Sock);
free(Params);
// Kill our thread and exit.
scePthreadExit(NULL);
return nullptr;
}
void* SocketListener::DoWork()
{
OrbisNetSockaddrIn addr = { 0 };
addr.sin_family = ORBIS_NET_AF_INET;
addr.sin_addr.s_addr = ORBIS_NET_INADDR_ANY; // Any incoming address
addr.sin_port = sceNetHtons(this->Port); // Our desired listen port
// Make new TCP Socket
this->Socket = sceNetSocket("Listener Socket", ORBIS_NET_AF_INET, ORBIS_NET_SOCK_STREAM, ORBIS_NET_IPPROTO_TCP);
// Set Sending and reciving time out to 1000 ms
int sock_timeout = 10000;
sceNetSetsockopt(this->Socket, ORBIS_NET_SOL_SOCKET, ORBIS_NET_SO_SNDTIMEO, &sock_timeout, sizeof(sock_timeout));
sceNetSetsockopt(this->Socket, ORBIS_NET_SOL_SOCKET, ORBIS_NET_SO_RCVTIMEO, &sock_timeout, sizeof(sock_timeout));
// Make sure every time we can rebind to the port.
int reusePort = 1;
sceNetSetsockopt(this->Socket, ORBIS_NET_SOL_SOCKET, ORBIS_NET_SO_REUSEPORT, &reusePort, sizeof(reusePort));
auto bindError = sceNetBind(this->Socket, (OrbisNetSockaddr*)&addr, sizeof(addr));
if (bindError != 0)
{
klog("Failed to bind Listener to port %i\nError: %X", this->Port, bindError);
goto Cleanup;
}
if (sceNetListen(this->Socket, 100) != 0)
{
klog("Failed to start listening on Socket.\n");
goto Cleanup;
}
while (this->ServerRunning)
{
fd_set set;
struct timeval timeout;
FD_ZERO(&set); /* clear the set */
FD_SET(this->Socket, &set); /* add our file descriptor to the set */
timeout.tv_sec = 2;
timeout.tv_usec = 0;
// Wait fo rincoming connections.
auto rv = select((int)this->Socket + 1, &set, NULL, NULL, &timeout);
if (rv == -1)
goto Cleanup;
else if (rv == 0)
{
if (!this->ServerRunning)
goto Cleanup;
continue;
}
else
{
if (!this->ServerRunning)
goto Cleanup;
OrbisNetSockaddrIn ClientAddr = { 0 };
OrbisNetSocklen_t addrlen = sizeof(OrbisNetSockaddrIn);
auto ClientSocket = sceNetAccept(this->Socket, (OrbisNetSockaddr*)&ClientAddr, &addrlen);
if (ClientSocket != -1)
{
//klog("New Connection from %i.%i.%i.%i!\n", ClientAddr.sin_addr.s_addr & 0xFF, (ClientAddr.sin_addr.s_addr >> 8) & 0xFF, (ClientAddr.sin_addr.s_addr >> 16) & 0xFF, (ClientAddr.sin_addr.s_addr >> 24) & 0xFF);
int optval = 1;
sceNetSetsockopt(ClientSocket, ORBIS_NET_SOL_SOCKET, ORBIS_NET_SO_NOSIGPIPE, &optval, sizeof(optval));
// Set up thread params.
ClientThreadParams* Params = new ClientThreadParams();
Params->socketListener = this;
Params->Sock = ClientSocket;
// Create Thread to handle connection.
OrbisPthread* Thread;
scePthreadCreate(&Thread, NULL, &ClientThread, Params, "Client Thread");
// Reset ClientSocket.
ClientSocket = -1;
}
}
}
Cleanup:
klog("Listener Thread Exiting!\n");
// Clean up.
this->ThreadCleanedUp = true;
// Clean up.
sceNetSocketClose(this->Socket);
// Kill our thread and exit.
scePthreadExit(NULL);
return nullptr;
}
void* SocketListener::ListenThread(void* tdParam)
{
return ((SocketListener*)tdParam)->DoWork();
}
SocketListener::SocketListener(void(*ClientCallBack)(void* tdParam, OrbisNetId Sock), void* tdParam, unsigned short Port)
{
klog("Socket Listener.\n");
this->ClientCallBack = ClientCallBack;
this->tdParam = tdParam;
this->ServerRunning = true;
this->ThreadCleanedUp = false;
this->Port = Port;
scePthreadCreate(&ListenThreadHandle, NULL, &ListenThread, this, "Listen Thread");
}
SocketListener::~SocketListener()
{
klog("~Socket Listener.\n");
this->ServerRunning = false;
while (!this->ThreadCleanedUp) { sceKernelUsleep(10); }
klog("Destruction sucessful.\n");
}
+24
View File
@@ -0,0 +1,24 @@
#pragma once
class SocketListener
{
private:
OrbisPthread Thread;
OrbisNetId Socket;
/// Used to signal thread to shut down
bool ServerRunning;
/// Used to see when listen thread has closed.
bool ThreadCleanedUp;
unsigned short Port;
OrbisPthread* ListenThreadHandle;
void* DoWork();
static void* ClientThread(void* tdParam);
void* tdParam;
void(*ClientCallBack)(void* tdParam, OrbisNetId Sock);
static void* ListenThread(void* tdParam);
public:
SocketListener(void(*ClientCallBack)(void* tdParam, OrbisNetId Sock), void* tdParam, unsigned short Port);
~SocketListener();
};
+143
View File
@@ -0,0 +1,143 @@
#include "Common.h"
#include "System.h"
#include "Registry.h"
int ChangeSystemState(SystemState State)
{
OrbisKernelEventFlag EventFlag = 0;
int ret = 0;
// sceSysCoreSetRebootFlag
ret = sceKernelOpenEventFlag(&EventFlag, "SceSysCoreReboot");
if (!ret)
{
ret = sceKernelCancelEventFlag(EventFlag, State, 0);
if (!ret)
{
sceKernelCloseEventFlag(EventFlag);
ret = 0;
}
}
sceKernelIccIndicatorShutdown();
kill(1, 30); //Terminate Process 1 (mini-syscore.elf) with the signal 30.
return ret;
}
void SetConsoleLED(ConsoleLEDColours Colour)
{
switch (Colour)
{
default:
case white:
sceKernelIccIndicatorBootDone();
break;
case white_Blinking:
sceKernelIccIndicatorShutdown();
break;
case Blue_Blinking:
sceKernelIccIndicatorStandbyBoot();
break;
}
}
void SetControllerLED()
{
}
void RingBuzzer(BuzzerType Type)
{
if (Type < 6)
sceKernelIccSetBuzzer(Type);
}
int32_t GetCPUTemp()
{
int32_t CPUTemp = 0;
if (sceKernelGetCpuTemperature(&CPUTemp) == 0)
return CPUTemp;
else
return -1;
}
int32_t GetSOCTemp()
{
int32_t SOCTemp = 0;
if (sceKernelGetSocSensorTemperature(0, &SOCTemp) == 0)
return SOCTemp;
else
return -1;
}
int GetSDKVersion()
{
int sdk_version = 0;
size_t sdk_versionlen = 4;
sysctlbyname("kern.sdk_version", (char*)&sdk_version, &sdk_versionlen, nullptr, 0);
return sdk_version;
}
int GetUpdateVersion()
{
int sdk_version = 0;
size_t sdk_versionlen = 4;
sysctlbyname("machdep.upd_version", (char*)&sdk_version, &sdk_versionlen, nullptr, 0);
return sdk_version;
}
bool GetConsoleName(char* Out, size_t len)
{
return sceRegMgrGetStr(Registry_Find_By_Name("/SYSTEM/nickname"), Out, len) == 0;
}
int GetIDPS(char* Out)
{
size_t IDPSlen = 16;
return sysctlbyname("machdep.idps", Out, &IDPSlen, NULL, NULL);
}
int GetPSID(char* Out)
{
size_t PSID = 16;
return sysctlbyname("machdep.openpsid", Out, &PSID, NULL, NULL);
}
ConsoleTypes GetConsoleType()
{
char IDPS[16] = { 0 };
size_t IDPSlen = 16;
sysctlbyname("machdep.idps", (char*)&IDPS, &IDPSlen, NULL, NULL);
switch (IDPS[5] & 0xffU)
{
case 0x80:
return CT_DIAG;
break;
case 0x81:
return CT_DEVKIT;
break;
case 0x82:
return CT_TESTKIT;
break;
case 0x83 ... 0x8F:
return CT_RETAIL;
break;
case 0xA0:
return CT_KRATOS;
break;
}
return CT_UNK;
}
+38
View File
@@ -0,0 +1,38 @@
#pragma once
enum SystemState
{
Suspend = 0x8004000,
Shutdown = 0x4000,
Reboot = 0x0,
};
enum ConsoleLEDColours
{
white,
white_Blinking,
Blue_Blinking,
};
enum ConsoleTypes
{
CT_UNK,
CT_DIAG, //0x80
CT_DEVKIT, //0x81
CT_TESTKIT, //0x82
CT_RETAIL, //0x83 -> 0x8F
CT_KRATOS, //0xA0 IMPOSSIBLE??
};
int ChangeSystemState(SystemState State);
void SetConsoleLED(ConsoleLEDColours Colour);
void SetControllerLED();
void RingBuzzer(BuzzerType Type);
int32_t GetCPUTemp();
int32_t GetSOCTemp();
int GetSDKVersion();
int GetUpdateVersion();
bool GetConsoleName(char* Out, size_t len);
int GetIDPS(char* Out);
int GetPSID(char* Out);
ConsoleTypes GetConsoleType();
@@ -1,14 +1,7 @@
#include "Common.h"
#include "Target.h"
#include "APIHelper.h"
#include "Registry.h"
#include "System.h"
#include "Flash.h"
#include "Config.h"
#include "Debug_Features.h"
#include "ShellCoreUtilWrapper.h"
#include "NetWrapper.h"
#include "System_Monitor.h"
#include <orbis/SysCore.h>
void Target::HandleAPI(OrbisNetId Sock, APIPacket* Packet)
{
@@ -27,7 +20,7 @@ void Target::HandleAPI(OrbisNetId Sock, APIPacket* Packet)
case APICommands::API_TARGET_RESTMODE:
ChangeSystemState(System_State::Suspend);
ChangeSystemState(SystemState::Suspend);
SendStatus(Sock, APIResults::API_OK);
@@ -35,7 +28,7 @@ void Target::HandleAPI(OrbisNetId Sock, APIPacket* Packet)
case APICommands::API_TARGET_SHUTDOWN:
ChangeSystemState(System_State::Shutdown);
ChangeSystemState(SystemState::Shutdown);
SendStatus(Sock, APIResults::API_OK);
@@ -43,7 +36,7 @@ void Target::HandleAPI(OrbisNetId Sock, APIPacket* Packet)
case APICommands::API_TARGET_REBOOT:
ChangeSystemState(System_State::Reboot);
ChangeSystemState(SystemState::Reboot);
SendStatus(Sock, APIResults::API_OK);
@@ -103,13 +96,17 @@ void Target::SendTargetInfo(OrbisNetId Sock)
ReadFlash(FLASH_FACTORY_FW, &Packet->FactorySoftwareVersion, sizeof(int));
Packet->CPUTemp = GetCPUTemp();
Packet->SOCTemp = GetSOCTemp();
strcpy(Packet->CurrentTitleID, CallInMonoThread->RemoteCall<char*>(GetBigAppTitleId)); // TODO: NOP Debug print.
OrbisAppInfo bigAppInfo;
sceApplicationGetAppInfoByAppId(sceSystemServiceGetAppIdOfBigApp(), &bigAppInfo);
strcpy(Packet->CurrentTitleID, bigAppInfo.TitleId);
GetConsoleName(Packet->ConsoleName, 100);
ReadFlash(FLASH_MB_SERIAL, &Packet->MotherboardSerial, 14);
ReadFlash(FLASH_SERIAL, &Packet->Serial, 10);
ReadFlash(FLASH_MODEL, &Packet->Model, 14);
strcpy(Packet->MACAdressLAN, CallInMonoThread->RemoteCall<char*>(NetWrapper::GetMacAddressInfo, SCE_NET_IF_NAME_PHYSICAL));
strcpy(Packet->MACAdressWIFI, CallInMonoThread->RemoteCall<char*>(NetWrapper::GetMacAddressInfo, SCE_NET_IF_NAME_WLAN0));
// strcpy(Packet->MACAdressLAN, CallInMonoThread->RemoteCall<char*>(NetWrapper::GetMacAddressInfo, SCE_NET_IF_NAME_PHYSICAL));
// strcpy(Packet->MACAdressWIFI, CallInMonoThread->RemoteCall<char*>(NetWrapper::GetMacAddressInfo, SCE_NET_IF_NAME_WLAN0));
ReadFlash(FLASH_UART_FLAG, &Packet->UART, 1);
ReadFlash(FLASH_IDU_MODE, &Packet->IDUMode, 1);
GetIDPS(Packet->IDPS);
@@ -121,19 +118,19 @@ void Target::SendTargetInfo(OrbisNetId Sock)
//Packet->CurrentProc
// Storage Stats.
uint64_t HDDFreeSpace, HDDTotalSpace;
/*uint64_t HDDFreeSpace, HDDTotalSpace;
CallInMonoThread->RemoteCall<int>(ShellCoreUtilWrapper::sceShellCoreUtilGetFreeSizeOfUserPartition, &HDDFreeSpace, &HDDTotalSpace);
Packet->FreeSpace = HDDFreeSpace;
Packet->TotalSpace = HDDTotalSpace;
Packet->TotalSpace = HDDTotalSpace;*/
// Perf Stats.
Packet->CPUTemp = System_Monitor::CPU_Temp;
/*Packet->CPUTemp = System_Monitor::CPU_Temp;
Packet->SOCTemp = System_Monitor::SOC_Temp;
Packet->ThreadCount = System_Monitor::Thread_Count;
Packet->AverageCPUUsage = System_Monitor::Average_Usage;
Packet->BusyCore = System_Monitor::Busy_Core;
memcpy(&Packet->Ram, &System_Monitor::RAM, sizeof(MemoryInfo));
memcpy(&Packet->VRam, &System_Monitor::VRAM, sizeof(MemoryInfo));
memcpy(&Packet->VRam, &System_Monitor::VRAM, sizeof(MemoryInfo));*/
sceNetSend(Sock, Packet, sizeof(TargetInfoPacket), 0);
@@ -156,7 +153,8 @@ void Target::DoNotify(OrbisNetId Sock)
void Target::SetSettings(OrbisNetId Sock)
{
auto Packet = new TargetSettingsPacket();
//TODO: IPC here...
/*auto Packet = new TargetSettingsPacket();
sceNetRecv(Sock, Packet, sizeof(TargetSettingsPacket), 0);
@@ -167,7 +165,7 @@ void Target::SetSettings(OrbisNetId Sock)
SendStatus(Sock, APIResults::API_OK);
Config::SetSettingsNow = true;
Config::SetSettingsNow = true;*/
}
//TODO: Get Target Settings.
+25
View File
@@ -60,6 +60,31 @@ void Notify(const char* MessageFMT, ...)
sceKernelSendNotificationRequest(0, &Buffer, 3120, 0);
}
void Notify_Custom(const char* IconURI, const char* MessageFMT, ...)
{
OrbisNotificationRequest Buffer;
//Create full string from va list.
va_list args;
va_start(args, MessageFMT);
vsprintf(Buffer.message, MessageFMT, args);
va_end(args);
//Populate the notify buffer.
Buffer.type = OrbisNotificationRequestType::NotificationRequest; //this one is just a standard one and will print what ever is stored at the buffer.Message.
Buffer.unk3 = 0;
Buffer.useIconImageUri = 1; //Bool to use a custom uri.
Buffer.targetId = -1; //Not sure if name is correct but is always set to -1.
strcpy(Buffer.iconUri, IconURI); //Copy the uri to the buffer.
//From user land we can call int64_t sceKernelSendNotificationRequest(int64_t unk1, char* Buffer, size_t size, int64_t unk2) which is a libkernel import.
sceKernelSendNotificationRequest(0, &Buffer, 3120, 0);
//What sceKernelSendNotificationRequest is doing is opening the device "/dev/notification0" or "/dev/notification1"
// and writing the NotifyBuffer we created to it. Somewhere in ShellUI it is read and parsed into a json which is where
// I found some clues on how to build the buffer.
}
void klog(const char* fmt, ...)
{
char Buffer[0x200];
+1 -1
View File
@@ -12,7 +12,6 @@ struct SceDbgModuleInfo {
SceDbgModuleSegmentInfo segmentInfo[4];
uint32_t numSegments;
uint8_t fingerprint[20];
};
//Modules.
@@ -21,6 +20,7 @@ bool LoadModules();
//Misc
void Notify(const char* MessageFMT, ...);
void Notify_Custom(const char* IconURI, const char* MessageFMT, ...);
void klog(const char* fmt, ...);
int sys_dynlib_get_info(int moduleHandle, SceDbgModuleInfo* destModuleInfo);
int sys_dynlib_get_list(int* destModuleHandles, int max, int* count);
+11 -11
View File
@@ -1,11 +1,11 @@
#pragma once
#define ORBISLIB_MAJOR 3
#define ORBISLIB_MINOR 0
#define ORBISLIB_BUILDVERSION 1
#define stringify(a) stringify_(a)
#define stringify_(a) #a
#if defined(_DEBUG)
#define ORBISLIB_BUILDSTRING ("[OrbisLib Daemon " stringify(ORBISLIB_MAJOR) "." stringify(ORBISLIB_MINOR) "] Dev Build " stringify(ORBISLIB_BUILDVERSION) " " __DATE__ " " __TIME__)
#else
#define ORBISLIB_BUILDSTRING ("[OrbisLib Daemon " stringify(ORBISLIB_MAJOR) "." stringify(ORBISLIB_MINOR) "] Build " stringify(ORBISLIB_BUILDVERSION) " " __DATE__ " " __TIME__)
#endif
#pragma once
#define ORBISLIB_MAJOR 3
#define ORBISLIB_MINOR 0
#define ORBISLIB_BUILDVERSION 181
#define stringify(a) stringify_(a)
#define stringify_(a) #a
#if defined(_DEBUG)
#define ORBISLIB_BUILDSTRING ("[OrbisLib Daemon " stringify(ORBISLIB_MAJOR) "." stringify(ORBISLIB_MINOR) "] Dev Build " stringify(ORBISLIB_BUILDVERSION) " " __DATE__ " " __TIME__)
#else
#define ORBISLIB_BUILDSTRING ("[OrbisLib Daemon " stringify(ORBISLIB_MAJOR) "." stringify(ORBISLIB_MINOR) "] Build " stringify(ORBISLIB_BUILDVERSION) " " __DATE__ " " __TIME__)
#endif
+6
View File
@@ -15,9 +15,15 @@ extern "C"
size_t data_size;
};
struct ProcInfo
{
char ProcName[32];
};
void jbc_run_as_root(void(*fn)(void* arg), void* arg, int cwd_mode);
int jbc_mount_in_sandbox(const char* system_path, const char* mnt_name);
int jbc_unmount_in_sandbox(const char* mnt_name);
int jbc_set_proc_name(const char* New_Name);
int jbc_get_proc_libraries(struct LibraryInfo* out, int maxCount);
uint64_t jbc_get_proc_list(struct ProcInfo* out, int maxCount);
}
+33 -2
View File
@@ -1,5 +1,32 @@
#include "Common.h"
#include "Version.h"
#include "API.h"
#include <orbis/SystemService.h>
#include <orbis/SysCore.h>
#define CTL_KERN 1
#define KERN_PROC 14
#define KERN_PROC_PID 1
#define KERN_PROC_APPINFO 35
void hexdump(void* ptr, int buflen) {
unsigned char* buf = (unsigned char*)ptr;
int i, j;
for (i = 0; i < buflen; i += 16) {
klog("%06x: ", i);
for (j = 0; j < 16; j++)
if (i + j < buflen)
klog("%02x ", buf[i + j]);
else
klog(" ");
klog(" ");
for (j = 0; j < 16; j++)
if (i + j < buflen)
klog("%c", isprint(buf[i + j]) ? buf[i + j] : '.');
klog("\n");
}
}
int main()
{
@@ -21,20 +48,24 @@ int main()
return 0;
}
// Use future GoldHEN JB.
// Use GoldHEN JB.
jailbreak_backup jb1;
sys_sdk_jailbreak(&jb1);
// Set the Name of this process so it shows up as something other than eboot.bin.
jbc_set_proc_name("OrbisLibAPI");
klog(ORBISLIB_BUILDSTRING);
klog("\n%s\n\n", ORBISLIB_BUILDSTRING);
API::Init();
while (true)
{
sceKernelSleep(1);
}
klog("Time to go :(\n");
sceSystemServiceLoadExec("exit", 0);
return 0;
@@ -118,6 +118,7 @@ call build.bat $(IntDir) "$(TargetName)" "$(SolutionDir)"</NMakeReBuildCommandLi
<ItemGroup>
<ClInclude Include="Common.h" />
<ClInclude Include="Config.h" />
<ClInclude Include="libjbc.h" />
<ClInclude Include="Utilities.h" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
@@ -33,5 +33,8 @@
<ClInclude Include="Config.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="libjbc.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup>
</Project>
+1
View File
@@ -1,5 +1,6 @@
#include "Common.h"
#include "Utilities.h"
#include "libjbc.h"
#include <orbis/Net.h>
#include <sys/uio.h>
#include <orbis/MsgDialog.h>
+2 -2
View File
@@ -13,7 +13,7 @@ set outputOelf=%intdir%%targetname%.oelf
Rem Compile object files for all the source files
for %%f in (*.cpp) do (
clang++ -cc1 -triple x86_64-scei-ps4-elf -I"%OO_PS4_TOOLCHAIN%\\include" -I"%OO_PS4_TOOLCHAIN%\\include\\c++\\v1" -I"..\\..\\External\\GoldHEN_Plugins_SDK\\include" -DORBISLIB_DEBUG -emit-obj -o %intdir%\%%~nf.o %%~nf.cpp
clang++ -cc1 -triple x86_64-scei-ps4-elf -I"%OO_PS4_TOOLCHAIN%\\include" -I"%OO_PS4_TOOLCHAIN%\\include\\c++\\v1" -I"..\\..\\External\\GoldHEN_Plugins_SDK\\include" -I"..\\..\\External\\ps4-libjbc" -DORBISLIB_DEBUG -emit-obj -o %intdir%\%%~nf.o %%~nf.cpp
)
Rem Get a list of object files for linking
@@ -21,7 +21,7 @@ set obj_files=
for %%f in (%1\\*.o) do set obj_files=!obj_files! .\%%f
Rem Link the input ELF
ld.lld -m elf_x86_64 -pie --script "%OO_PS4_TOOLCHAIN%\link.x" --eh-frame-hdr -o "%outputElf%" "-L%OO_PS4_TOOLCHAIN%\\lib" "-L..\\..\\External\\GoldHEN_Plugins_SDK" %libraries% --verbose "%OO_PS4_TOOLCHAIN%\lib\crt1.o" %obj_files%
ld.lld -m elf_x86_64 -pie --script "%OO_PS4_TOOLCHAIN%\link.x" --eh-frame-hdr -o "%outputElf%" "-L%OO_PS4_TOOLCHAIN%\\lib" "-L..\\..\\External\\GoldHEN_Plugins_SDK" %libraries% --verbose "%OO_PS4_TOOLCHAIN%\lib\crt1.o" %obj_files% "..\\..\\External\\ps4-libjbc\\jbc.o"
Rem Create the eboot
%OO_PS4_TOOLCHAIN%\bin\windows\create-fself.exe -in "%outputElf%" --out "%outputOelf%" --eboot "eboot.bin"
+29
View File
@@ -0,0 +1,29 @@
#pragma once
extern "C"
{
enum { CWD_KEEP, CWD_ROOT, CWD_RESET };
struct LibraryInfo
{
char Path[256];
uint64_t ModuleHandle;
uint64_t map_base;
size_t map_size;
size_t text_size;
uint64_t data_base;
size_t data_size;
};
struct ProcInfo
{
char ProcName[32];
};
void jbc_run_as_root(void(*fn)(void* arg), void* arg, int cwd_mode);
int jbc_mount_in_sandbox(const char* system_path, const char* mnt_name);
int jbc_unmount_in_sandbox(const char* mnt_name);
int jbc_set_proc_name(const char* New_Name);
int jbc_get_proc_libraries(struct LibraryInfo* out, int maxCount);
uint64_t jbc_get_proc_list(struct ProcInfo* out, int maxCount);
}
+3 -2
View File
@@ -32,11 +32,12 @@ int main()
mount_large_fs("/dev/da0x4.crypt", "/system", "exfatfs", "511", MNT_UPDATE);
// Install all the things! :D
InstallDaemon("ORBS30000"); // Orbis Lib
//InstallDaemon("ORBS30000"); // Orbis Lib
InstallOrbisToolbox();
//TODO: Pull module list of SceShellUI to see if we should unload the toolbox.
// Use GoldHEN SDK to load PRX to SceShellUI.
auto Handle = sys_sdk_proc_prx_load("SceShellUI", "/user/data/Orbis Toolbox/OrbisToolbox-2.0.sprx");
@@ -47,7 +48,7 @@ int main()
klog("error: %d\n", Handle);
Notify("Failed to load Orbis Toolbox!");
}
sceSystemServiceLoadExec("exit", 0);
return 0;
-80
View File
@@ -1,80 +0,0 @@
#include "Common.h"
#include "API.h"
Proc* API::Proc;
Debug* API::Debug;
Target* API::Target;
SocketListener* API::Listener;
bool API::Running = false;
void API::ListenerCallback(void* tdParam, OrbisNetId s)
{
auto Packet = RecievePacket<APIPacket>(s);
if (Packet != nullptr)
{
// Make sure were getting the proper packet version.
if (Packet->PacketVersion != PACKET_VERSION)
{
//klog("Packet version %i does not match our expected %i version!\n", Packet->PacketVersion, PACKET_VERSION);
free(Packet);
return;
}
// Send out the command to the right places.
switch (Packet->Command)
{
default:
klog("API: Invalid Command %i...\n", Packet->Command);
break;
case APICommands::PROC_START ... APICommands::PROC_END:
Proc->HandleAPI(s, Packet);
break;
case APICommands::DBG_START ... APICommands::DBG_END:
Debug->HandleAPI(s, Packet);
break;
case APICommands::KERN_START ... APICommands::KERN_END:
klog("Kernel API Call\n");
break;
case APICommands::TARGET_START ... APICommands::TARGET_END:
Target->HandleAPI(s, Packet);
break;
}
}
// Clean up. :)
free(Packet);
}
void API::Init()
{
if (!Running)
{
klog("API Startup.\n");
Proc = new class Proc();
Debug = new class Debug();
Target = new class Target();
Listener = new SocketListener(ListenerCallback, NULL, 6900);
Running = true;
}
}
void API::Term()
{
if (Running)
{
delete Proc;
delete Debug;
delete Target;
delete Listener;
Running = false;
}
}
-22
View File
@@ -1,22 +0,0 @@
#pragma once
#include "Proc.h"
#include "Debug.h"
#include "Target.h"
#include "SocketListener.h"
#include "APIHelper.h"
class API
{
private:
static Proc* Proc;
static Debug* Debug;
static Target* Target;
static SocketListener* Listener;
static void ListenerCallback(void* tdParam, OrbisNetId s);
public:
static bool Running;
static void Init();
static void Term();
};
-1
View File
@@ -25,7 +25,6 @@
#include "Version.h"
#include "Utilities.h"
#include "APIPackets.h"
#include "Mono.h"
#include "Detour.h"
#include "Patcher.h"
-144
View File
@@ -1,144 +0,0 @@
#include "Common.h"
#include "KDriver.h"
bool KDriver::TestDriver()
{
int fd = sceKernelOpen("/dev/OrbisSuite", ORBIS_KERNEL_O_RDONLY, 0);
if (fd > 0)
{
klog("Driver Installed...\n");
sceKernelClose(fd);
return true;
}
klog("Driver Not Installed...\n");
return false;
}
bool KDriver::GetDriverInfo(KDriver_Info* Info)
{
int fd = sceKernelOpen("/dev/OrbisSuite", 0, 0);
if (fd > 0)
{
int res = ioctl(fd, KDRIVER_INFO, Info);
if (res != 0)
{
klog("KDRIVER_INFO failed with %d\n", res);
sceKernelClose(fd);
return false;
}
sceKernelClose(fd);
return true;
}
else
klog("Where kernel??\n");
return false;
}
int KDriver::GetProcessList(int ProcessCount, ProcInfo* ProcList)
{
auto fd = sceKernelOpen("/dev/OrbisSuite", 0, 0);
if (fd > 0)
{
auto Info = new KDriver_ProcList();
Info->UserlandAddr = (uint64_t)ProcList;
Info->UserlandSize = ((sizeof(ProcInfo) * ProcessCount));
Info->ProcCount = ProcessCount;
auto res = ioctl(fd, PROC_LIST, Info);
if (res != 0)
{
delete Info;
sceKernelClose(fd);
return res;
}
sceKernelClose(fd);
delete Info;
return Info->ProcCount;
}
else
klog("Where kernel??\n");
return -1;
}
int KDriver::LoadSPRX(const char* ProccessName, const char* Path, bool ShouldCallEntry)
{
auto fd = sceKernelOpen("/dev/OrbisSuite", 0, 0);
if (fd > 0)
{
KDriver_ProcSPRX ProcSPRX;
ProcSPRX.CallType = 0;
strcpy(ProcSPRX.ProcName, ProccessName);
strcpy(ProcSPRX.Path, Path);
ProcSPRX.CallEntryExit = ShouldCallEntry;
auto res = ioctl(fd, PROC_SPRX, &ProcSPRX);
sceKernelClose(fd);
return res;
}
else
klog("Where kernel??\n");
return -1;
}
int KDriver::UnLoadSPRX(const char* ProccessName, const char* Name, bool ShouldCallExit)
{
auto fd = sceKernelOpen("/dev/OrbisSuite", 0, 0);
if (fd > 0)
{
KDriver_ProcSPRX ProcSPRX;
ProcSPRX.CallType = 1;
strcpy(ProcSPRX.ProcName, ProccessName);
strcpy(ProcSPRX.Path, Name);
ProcSPRX.CallEntryExit = ShouldCallExit;
auto res = ioctl(fd, PROC_SPRX, &ProcSPRX);
sceKernelClose(fd);
return res;
}
else
klog("Where kernel??\n");
return -1;
}
int KDriver::UnLoadSPRX(const char* ProccessName, int ModuleHandle, bool ShouldCallExit)
{
auto fd = sceKernelOpen("/dev/OrbisSuite", 0, 0);
if (fd > 0)
{
KDriver_ProcSPRX ProcSPRX;
ProcSPRX.CallType = 2;
strcpy(ProcSPRX.ProcName, ProccessName);
ProcSPRX.Handle = ModuleHandle;
ProcSPRX.CallEntryExit = ShouldCallExit;
auto res = ioctl(fd, PROC_SPRX, &ProcSPRX);
sceKernelClose(fd);
return res;
}
else
klog("Where kernel??\n");
return -1;
}
-25
View File
@@ -1,25 +0,0 @@
#pragma once
#include "../../Misc/DriverDefinitions.h"
class KDriver
{
public:
// Driver
static bool TestDriver();
static bool GetDriverInfo(KDriver_Info* Info);
// Proc
static int GetProcessList(int ProcessCount, ProcInfo* ProcList);
// AttachtoProcess
// DetachfromProcess
// ReadProcessMemory
// WriteProcessMemory
// GetProcessInfo
// GetModuleList
static int LoadSPRX(const char* ProccessName, const char* Path, bool ShouldCallEntry = true);
static int UnLoadSPRX(const char* ProccessName, const char* Name, bool ShouldCallExit = true);
static int UnLoadSPRX(const char* ProccessName, int ModuleHandle, bool ShouldCallExit = true);
private:
};
+1 -13
View File
@@ -8,8 +8,6 @@
#include "Config.h"
#include "LncUtil.h"
#include "Daemons.h"
#include "KDriver.h"
#include "API.h"
#include "NetWrapper.h"
@@ -206,11 +204,7 @@ void Menu::Init()
// Orbis Suite Debug
Add_Option("id_orbis_api", []() -> void
{
API::Term();
API::Init();
Notify("API Restarted!");
});
Add_Option("id_orbis_api_toggle", &API::Running, Type_Boolean, []() ->void { API::Running ? API::Term() : API::Init(); });
Add_Option("id_orbis_test", []() -> void
{
klog("WIFI MAC: %s\nLAN MAC: %s\n",
@@ -240,13 +234,7 @@ void Menu::Init()
});
Add_Option("id_orbis_listproc", []() -> void
{
ProcInfo Infos[200];
auto count = KDriver::GetProcessList(200, (ProcInfo*)&Infos);
for (int i = 0; i < count; i++)
{
klog("%i %s %s\n", Infos[i].PID, Infos[i].ProcName, Infos[i].TitleID);
}
});
Add_Option("id_orbis_listlocalproc", []() -> void
{
@@ -78,22 +78,16 @@ del /s /q /f $(IntDir)\*.oelf</NMakeCleanCommandLine>
<None Include="Embed.s" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="API.h" />
<ClInclude Include="APIHelper.h" />
<ClInclude Include="APIPackets.h" />
<ClInclude Include="Breakpoint.h" />
<ClInclude Include="Build_Overlay.h" />
<ClInclude Include="Common.h" />
<ClInclude Include="Config.h" />
<ClInclude Include="Daemons.h" />
<ClInclude Include="Debug.h" />
<ClInclude Include="Debug_Features.h" />
<ClInclude Include="Detour.h" />
<ClInclude Include="Flash.h" />
<ClInclude Include="GamePad.h" />
<ClInclude Include="Game_Overlay.h" />
<ClInclude Include="hde64.h" />
<ClInclude Include="KDriver.h" />
<ClInclude Include="Label.h" />
<ClInclude Include="LncUtil.h" />
<ClInclude Include="Menu.h" />
@@ -101,7 +95,6 @@ del /s /q /f $(IntDir)\*.oelf</NMakeCleanCommandLine>
<ClInclude Include="NetWrapper.h" />
<ClInclude Include="Panel.h" />
<ClInclude Include="Patcher.h" />
<ClInclude Include="Proc.h" />
<ClInclude Include="Registry.h" />
<ClInclude Include="RemoteCaller.h" />
<ClInclude Include="Settings_Menu.h" />
@@ -111,23 +104,17 @@ del /s /q /f $(IntDir)\*.oelf</NMakeCleanCommandLine>
<ClInclude Include="System.h" />
<ClInclude Include="System_Monitor.h" />
<ClInclude Include="table64.h" />
<ClInclude Include="Target.h" />
<ClInclude Include="UI.h" />
<ClInclude Include="UI_Utilities.h" />
<ClInclude Include="Utilities.h" />
<ClInclude Include="Version.h" />
<ClInclude Include="Watchpoint.h" />
<ClInclude Include="Widget.h" />
</ItemGroup>
<ItemGroup>
<ClCompile Include="API.cpp" />
<ClCompile Include="APIHelper.cpp" />
<ClCompile Include="Breakpoint.cpp" />
<ClCompile Include="Build_Overlay.cpp" />
<ClCompile Include="Config.cpp" />
<ClCompile Include="Custom_Content.cpp" />
<ClCompile Include="Daemons.cpp" />
<ClCompile Include="Debug.cpp" />
<ClCompile Include="DebugTitleIdLabel.cpp" />
<ClCompile Include="Detour.cpp" />
<ClCompile Include="DevkitPanel.cpp" />
@@ -135,7 +122,6 @@ del /s /q /f $(IntDir)\*.oelf</NMakeCleanCommandLine>
<ClCompile Include="GamePad.cpp" />
<ClCompile Include="Game_Overlay.cpp" />
<ClCompile Include="hde64.cpp" />
<ClCompile Include="KDriver.cpp" />
<ClCompile Include="Label.cpp" />
<ClCompile Include="LncUtil.cpp" />
<ClCompile Include="Menu.cpp" />
@@ -144,7 +130,6 @@ del /s /q /f $(IntDir)\*.oelf</NMakeCleanCommandLine>
<ClCompile Include="OrbisToolbox.cpp" />
<ClCompile Include="Panel.cpp" />
<ClCompile Include="Patcher.cpp" />
<ClCompile Include="Proc.cpp" />
<ClCompile Include="Registry.cpp" />
<ClCompile Include="RemoteCaller.cpp" />
<ClCompile Include="Settings_Menu.cpp" />
@@ -153,10 +138,8 @@ del /s /q /f $(IntDir)\*.oelf</NMakeCleanCommandLine>
<ClCompile Include="SysfileUtilWrapper.cpp" />
<ClCompile Include="System.cpp" />
<ClCompile Include="System_Monitor.cpp" />
<ClCompile Include="Target.cpp" />
<ClCompile Include="UI_Utilities.cpp" />
<ClCompile Include="Utilities.cpp" />
<ClCompile Include="Watchpoint.cpp" />
<ClCompile Include="Widget.cpp" />
</ItemGroup>
<ItemGroup>
@@ -16,12 +16,6 @@
<Filter Include="Header Files\Utilities">
<UniqueIdentifier>{a1e7d8c0-9965-4dae-9e21-fec87fa057a9}</UniqueIdentifier>
</Filter>
<Filter Include="Source Files\API">
<UniqueIdentifier>{531e5d39-42b8-4cf7-93d0-9fc3bd9fe82d}</UniqueIdentifier>
</Filter>
<Filter Include="Header Files\API">
<UniqueIdentifier>{a61efd8d-78d4-4ce2-bf65-9db8d0c6c6f6}</UniqueIdentifier>
</Filter>
<Filter Include="Header Files\Toolbox">
<UniqueIdentifier>{128fb9c5-726e-4ead-9a69-eacccaf065c9}</UniqueIdentifier>
</Filter>
@@ -58,18 +52,6 @@
<Filter Include="Source Files\Toolbox\UI\Elements">
<UniqueIdentifier>{71a68f5f-0868-4608-b063-7a5913039770}</UniqueIdentifier>
</Filter>
<Filter Include="Header Files\API\Misc">
<UniqueIdentifier>{2034a675-8702-4fd0-921d-b001def607c9}</UniqueIdentifier>
</Filter>
<Filter Include="Source Files\API\Misc">
<UniqueIdentifier>{1bf13e33-42d9-45c2-8bb2-c58f9ea326f2}</UniqueIdentifier>
</Filter>
<Filter Include="Header Files\API\CmdGroups">
<UniqueIdentifier>{86b8ee3f-43bf-4077-972b-674021d009d7}</UniqueIdentifier>
</Filter>
<Filter Include="Source Files\API\CmdGroups">
<UniqueIdentifier>{689ef1b6-f9c8-4d7b-9a4a-73e5d45aea97}</UniqueIdentifier>
</Filter>
<Filter Include="Source Files\Utilities\Mono">
<UniqueIdentifier>{4e4c3e09-ba94-450a-ae0e-3dc2999f2400}</UniqueIdentifier>
</Filter>
@@ -141,30 +123,6 @@
<ClInclude Include="UI.h">
<Filter>Header Files\Toolbox\UI</Filter>
</ClInclude>
<ClInclude Include="API.h">
<Filter>Header Files\API</Filter>
</ClInclude>
<ClInclude Include="APIHelper.h">
<Filter>Header Files\API\Misc</Filter>
</ClInclude>
<ClInclude Include="APIPackets.h">
<Filter>Header Files\API\Misc</Filter>
</ClInclude>
<ClInclude Include="Target.h">
<Filter>Header Files\API\CmdGroups</Filter>
</ClInclude>
<ClInclude Include="Proc.h">
<Filter>Header Files\API\CmdGroups</Filter>
</ClInclude>
<ClInclude Include="Watchpoint.h">
<Filter>Header Files\API\CmdGroups</Filter>
</ClInclude>
<ClInclude Include="Breakpoint.h">
<Filter>Header Files\API\CmdGroups</Filter>
</ClInclude>
<ClInclude Include="Debug.h">
<Filter>Header Files\API\CmdGroups</Filter>
</ClInclude>
<ClInclude Include="SocketListener.h">
<Filter>Header Files\Utilities</Filter>
</ClInclude>
@@ -195,9 +153,6 @@
<ClInclude Include="Flash.h">
<Filter>Header Files\Utilities\PS Utils</Filter>
</ClInclude>
<ClInclude Include="KDriver.h">
<Filter>Header Files\Utilities\PS Utils</Filter>
</ClInclude>
<ClInclude Include="Registry.h">
<Filter>Header Files\Utilities\PS Utils</Filter>
</ClInclude>
@@ -263,27 +218,6 @@
<ClCompile Include="Widget.cpp">
<Filter>Source Files\Toolbox\UI\Elements</Filter>
</ClCompile>
<ClCompile Include="API.cpp">
<Filter>Source Files\API</Filter>
</ClCompile>
<ClCompile Include="APIHelper.cpp">
<Filter>Source Files\API\Misc</Filter>
</ClCompile>
<ClCompile Include="Breakpoint.cpp">
<Filter>Source Files\API\CmdGroups</Filter>
</ClCompile>
<ClCompile Include="Debug.cpp">
<Filter>Source Files\API\CmdGroups</Filter>
</ClCompile>
<ClCompile Include="Proc.cpp">
<Filter>Source Files\API\CmdGroups</Filter>
</ClCompile>
<ClCompile Include="Target.cpp">
<Filter>Source Files\API\CmdGroups</Filter>
</ClCompile>
<ClCompile Include="Watchpoint.cpp">
<Filter>Source Files\API\CmdGroups</Filter>
</ClCompile>
<ClCompile Include="SocketListener.cpp">
<Filter>Source Files\Utilities</Filter>
</ClCompile>
@@ -314,9 +248,6 @@
<ClCompile Include="Flash.cpp">
<Filter>Source Files\Utilities\PS Utils</Filter>
</ClCompile>
<ClCompile Include="KDriver.cpp">
<Filter>Source Files\Utilities\PS Utils</Filter>
</ClCompile>
<ClCompile Include="Registry.cpp">
<Filter>Source Files\Utilities\PS Utils</Filter>
</ClCompile>
+47 -27
View File
@@ -2,35 +2,59 @@
#include "Settings_Menu.h"
#include "System_Monitor.h"
#include "GamePad.h"
#include "API.h"
#include "RemoteCaller.h"
RemoteCaller* CallInMonoThread = NULL;
Detour* SearchJob_RunDetour;
void* SearchJob_RunHook(MonoObject* instance)
{
auto IsCancelled = Mono::Get_Property<bool>(Mono::UI_dll, "Sce.PlayStation.HighLevel.UI2", "Job", instance, "IsCancelled");
if (!IsCancelled)
{
auto SearchJob = Mono::Get_Class(Mono::App_exe, "Sce.Vsh.ShellUI.Settings.PkgInstaller", "SearchJob");
Mono::Invoke<void>(Mono::App_exe, SearchJob, instance, "SearchDir", Mono::New_String("/user/data/pkg"), Mono::New_String("/user/data/pkg"));
}
return SearchJob_RunDetour->Stub<void*>(instance);
}
void* InitThread(void* args)
{
klog("!! Hello World !!\n");
Mono::Init();
if (GamePad::IsDown(GamePad::Buttons::Left | GamePad::Buttons::Triangle))
{
Notify("Orbis Toolbox: Aborting Launch!!");
return 0;
}
// Toolbox
System_Monitor::Init();
Settings_Menu::Init();
//Title_Menu::Init();
// API
CallInMonoThread = new RemoteCaller();
Notify(ORBIS_TOOLBOX_NOTIFY);
SearchJob_RunDetour = new Detour();
SearchJob_RunDetour->DetourMethod(Mono::App_exe, "Sce.Vsh.ShellUI.Settings.PkgInstaller", "SearchJob", "Run", 0, (void*)SearchJob_RunHook);
scePthreadExit(NULL);
return 0;
}
extern "C"
{
int __cdecl module_start(size_t argc, const void* args)
{
klog("!! Hello World !!\n");
Mono::Init();
if (GamePad::IsDown(GamePad::Buttons::Left | GamePad::Buttons::Triangle))
{
Notify("Orbis Toolbox: Aborting Launch!!");
return 0;
}
// Toolbox
System_Monitor::Init();
Settings_Menu::Init();
//Title_Menu::Init();
// API
API::Init();
CallInMonoThread = new RemoteCaller();
Notify(ORBIS_TOOLBOX_NOTIFY);
OrbisPthread* hThread;
scePthreadCreate(&hThread, nullptr, InitThread, nullptr, "Init");
return 0;
}
@@ -45,16 +69,12 @@ extern "C"
//Title_Menu::Term();
// API
API::Term();
delete CallInMonoThread;
delete SearchJob_RunDetour;
sceKernelSleep(4);
return 0;
}
void _start()
{
}
}
@@ -1,24 +1,6 @@
#include "Common.h"
#include "SysfileUtilWrapper.h"
void Print_Bytes(char* Bytes, size_t len)
{
int Counter = 0;
for (size_t n = 0; n < len; n++)
{
printf("%02X ", Bytes[n]);
if (Counter >= 20)
{
printf("\n");
Counter = 0;
}
Counter++;
}
printf("\n");
}
char* SysfileUtilWrapper::GetString(const char* FilePath, const char* Key, unsigned int Size)
{
int fd = sceKernelOpen(FilePath, 0, 0511);
+11 -11
View File
@@ -1,11 +1,11 @@
#pragma once
#define ORBIS_TOOLBOX_MAJOR 2
#define ORBIS_TOOLBOX_MINOR 0
#define ORBIS_TOOLBOX_BUILDVERSION 218
#define stringify(a) stringify_(a)
#define stringify_(a) #a
#if defined(ORBIS_TOOLBOX_DEBUG)
#define ORBIS_TOOLBOX_BUILDSTRING ("[Orbis Toolbox " stringify(ORBIS_TOOLBOX_MAJOR) "." stringify(ORBIS_TOOLBOX_MINOR) "] Dev Build " stringify(ORBIS_TOOLBOX_BUILDVERSION) " " __DATE__ " " __TIME__)
#else
#define ORBIS_TOOLBOX_BUILDSTRING ("[Orbis Toolbox " stringify(ORBIS_TOOLBOX_MAJOR) "." stringify(ORBIS_TOOLBOX_MINOR) "] Build " stringify(ORBIS_TOOLBOX_BUILDVERSION) " " __DATE__ " " __TIME__)
#endif
#pragma once
#define ORBIS_TOOLBOX_MAJOR 2
#define ORBIS_TOOLBOX_MINOR 0
#define ORBIS_TOOLBOX_BUILDVERSION 249
#define stringify(a) stringify_(a)
#define stringify_(a) #a
#if defined(ORBIS_TOOLBOX_DEBUG)
#define ORBIS_TOOLBOX_BUILDSTRING ("[Orbis Toolbox " stringify(ORBIS_TOOLBOX_MAJOR) "." stringify(ORBIS_TOOLBOX_MINOR) "] Dev Build " stringify(ORBIS_TOOLBOX_BUILDVERSION) " " __DATE__ " " __TIME__)
#else
#define ORBIS_TOOLBOX_BUILDSTRING ("[Orbis Toolbox " stringify(ORBIS_TOOLBOX_MAJOR) "." stringify(ORBIS_TOOLBOX_MINOR) "] Build " stringify(ORBIS_TOOLBOX_BUILDVERSION) " " __DATE__ " " __TIME__)
#endif
@@ -16,16 +16,11 @@ namespace OrbisSuite
public UInt64 DataSegmentBase;
public UInt64 DataSegmentLen;
public ProcessInfo(Int32 PID, bool Attached, string Name, string TitleID, UInt64 TextSegmentBase, UInt64 TextSegmentLen, UInt64 DataSegmentBase, UInt64 DataSegmentLen)
public ProcessInfo(Int32 PID, string Name, string TitleID)
{
this.PID = PID;
this.Attached = Attached;
this.Name = Name;
this.TitleID = TitleID;
this.TextSegmentBase = TextSegmentBase;
this.TextSegmentLen = TextSegmentLen;
this.DataSegmentBase = DataSegmentBase;
this.DataSegmentLen = DataSegmentLen;
}
public ProcessInfo()
@@ -73,7 +68,7 @@ namespace OrbisSuite
Sock.Receive(RawPacket);
Helpers.BytestoStruct(RawPacket, ref Packet);
yield return new ProcessInfo(Packet.ProcessID, Packet.Attached == 1 ? true : false, Packet.ProcName, Packet.TitleID, Packet.TextSegmentBase, Packet.TextSegmentLen, Packet.DataSegmentBase, Packet.DataSegmentLen);
yield return new ProcessInfo(Packet.ProcessID, Packet.Name, Packet.TitleID);
}
API.CompleteCall(Sock);
@@ -18,6 +18,7 @@ namespace OrbisSuite.Common
/* ##### Debugger functions ##### */
DBG_START,
API_DBG_ATTACH, /* Debugger attach to target */
API_DBG_DETACH, /* Debugger detach from target */
API_DBG_GET_CURRENT,
@@ -63,19 +64,23 @@ namespace OrbisSuite.Common
API_DBG_WATCHPOINT_REMOVE,
API_DBG_WATCHPOINT_GETINFO,
API_DBG_WATCHPOINT_LIST,
DBG_END,
/* ############################## */
/* ###### Kernel functions ###### */
KERN_START,
API_KERN_BASE,
API_KERN_READ,
API_KERN_WRITE,
KERN_END,
/* ############################## */
/* ###### Target functions ###### */
TARGET_START,
API_TARGET_INFO,
API_TARGET_RESTMODE,
API_TARGET_SHUTDOWN,
@@ -85,7 +90,7 @@ namespace OrbisSuite.Common
API_TARGET_SET_LED,
API_TARGET_DUMP_PROC,
API_TARGET_SET_SETTINGS,
//API_TARGET_LOAD_VSH_MODULE
TARGET_END,
/* ############################## */
}
@@ -119,29 +124,28 @@ namespace OrbisSuite.Common
public struct ProcPacket
{
public int ProcessID;
public int Attached;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]
public string ProcName;
public string Name;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 10)]
public string TitleID;
public UInt64 TextSegmentBase;
public UInt64 TextSegmentLen;
public UInt64 DataSegmentBase;
public UInt64 DataSegmentLen;
}
[StructLayout(LayoutKind.Sequential, Pack = 4, CharSet = CharSet.Ansi)]
public struct ModuleListPacket
public struct SegmentInfo
{
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 36)]
public string Name;
public UInt64 baseAddr;
public uint size;
public int prot;
}
[StructLayout(LayoutKind.Sequential, Pack = 4, CharSet = CharSet.Ansi)]
public struct LibraryPacket
{
public Int64 Handle;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)]
public string Path;
public int Handle;
public UInt64 TextSegmentBase;
public UInt64 TextSegmentLen;
public UInt64 DataSegmentBase;
public UInt64 DataSegmentLen;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 64)]
public SegmentInfo[] Segments;
}
public enum ConsoleTypes
+1 -1
View File
@@ -55,6 +55,6 @@
/// <summary>
/// The version of the packets used to communicate with the Target Console.
/// </summary>
public static readonly int PacketVersion = 1;
public static readonly int PacketVersion = 2;
}
}
@@ -1 +1 @@
1384
1406
@@ -1 +1 @@
Version 3.0.1384 Debug Build Thursday December 01 2022 9:39 PM
Version 3.0.1406 Debug Build Saturday December 03 2022 10:47 PM