Skip to content

Commit

Permalink
7.51 support
Browse files Browse the repository at this point in the history
  • Loading branch information
LightningMods committed Mar 16, 2021
1 parent 1549258 commit b1b556b
Show file tree
Hide file tree
Showing 10 changed files with 599 additions and 5 deletions.
3 changes: 3 additions & 0 deletions kernel/src/Boot/Patches.cpp
Expand Up @@ -42,6 +42,9 @@ void Patches::install_prePatches()
case MIRA_PLATFORM_ORBIS_BSD_750:
install_prerunPatches_750();
break;
case MIRA_PLATFORM_ORBIS_BSD_751:
install_prerunPatches_751();
break;
case MIRA_PLATFORM_ORBIS_BSD_755:
install_prerunPatches_755();
break;
Expand Down
1 change: 1 addition & 0 deletions kernel/src/Boot/Patches.hpp
Expand Up @@ -22,6 +22,7 @@ namespace Mira
static void install_prerunPatches_650();
static void install_prerunPatches_672();
static void install_prerunPatches_750();
static void install_prerunPatches_751();
static void install_prerunPatches_755();
// static void install_prerunPatches_SteamLink(); // got both versions booting off the same code
static void install_prerunPatches_SteamLink2();
Expand Down
227 changes: 227 additions & 0 deletions kernel/src/Boot/Patches/Patches751.cpp
@@ -0,0 +1,227 @@
// This is an open source non-commercial project. Dear PVS-Studio, please check it.
// PVS-Studio Static Code Analyzer for C, C++, C#, and Java: http://www.viva64.com

#include <Boot/Patches.hpp>

/*
Please, please, please!
Keep patches consistent with the used patch style for readability.
*/
void Mira::Boot::Patches::install_prerunPatches_751()
{
#if MIRA_PLATFORM == MIRA_PLATFORM_ORBIS_BSD_751
// You must assign the kernel base pointer before anything is done
if (!gKernelBase)
return;

// Use "kmem" for all patches
uint8_t *kmem;

// Enable UART
kmem = (uint8_t *)&gKernelBase[0x01564910];
kmem[0] = 0x00;

// Verbose Panics
kmem = (uint8_t *)&gKernelBase[0x0046D11E];
kmem[0] = 0x90;
kmem[1] = 0x90;
kmem[2] = 0x90;
kmem[3] = 0x90;
kmem[4] = 0x90;

// sceSblACMgrIsAllowedSystemLevelDebugging
kmem = (uint8_t *)&gKernelBase[0x003644B0];
kmem[0] = 0xB8;
kmem[1] = 0x01;
kmem[2] = 0x00;
kmem[3] = 0x00;
kmem[4] = 0x00;
kmem[5] = 0xC3;

kmem = (uint8_t *)&gKernelBase[0x00364CD0];
kmem[0] = 0xB8;
kmem[1] = 0x01;
kmem[2] = 0x00;
kmem[3] = 0x00;
kmem[4] = 0x00;
kmem[5] = 0xC3;

kmem = (uint8_t *)&gKernelBase[0x00364CF0];
kmem[0] = 0xB8;
kmem[1] = 0x01;
kmem[2] = 0x00;
kmem[3] = 0x00;
kmem[4] = 0x00;
kmem[5] = 0xC3;

// Enable rwx mapping
kmem = (uint8_t *)&gKernelBase[0x001754AC];
kmem[0] = 0x07;

kmem = (uint8_t *)&gKernelBase[0x001754B4];
kmem[0] = 0x07;

// Patch copyin/copyout: Allow userland + kernel addresses in both params
// copyin
kmem = (uint8_t *)&gKernelBase[0x0028FA47];
kmem[0] = 0x90;
kmem[1] = 0x90;

kmem = (uint8_t *)&gKernelBase[0x0028FA53];
kmem[0] = 0x90;
kmem[1] = 0x90;
kmem[2] = 0x90;

// copyout
kmem = (uint8_t *)&gKernelBase[0x0028F952];
kmem[0] = 0x90;
kmem[1] = 0x90;

kmem = (uint8_t *)&gKernelBase[0x0028F95E];
kmem[0] = 0x90;
kmem[1] = 0x90;
kmem[2] = 0x90;

// Enable MAP_SELF
kmem = (uint8_t *)&gKernelBase[0x00364D40];
kmem[0] = 0xB8;
kmem[1] = 0x01;
kmem[2] = 0x00;
kmem[3] = 0x00;
kmem[4] = 0x00;
kmem[5] = 0xC3;

kmem = (uint8_t *)&gKernelBase[0x00364D60];
kmem[0] = 0xB8;
kmem[1] = 0x01;
kmem[2] = 0x00;
kmem[3] = 0x00;
kmem[4] = 0x00;
kmem[5] = 0xC3;

kmem = (uint8_t *)&gKernelBase[0x000DCED1];
kmem[0] = 0x31;
kmem[1] = 0xC0;
kmem[2] = 0x90;
kmem[3] = 0x90;
kmem[4] = 0x90;

// Patch copyinstr
kmem = (uint8_t *)&gKernelBase[0x0028FEF3];
kmem[0] = 0x90;
kmem[1] = 0x90;

kmem = (uint8_t *)&gKernelBase[0x0028FEFF];
kmem[0] = 0x90;
kmem[1] = 0x90;
kmem[2] = 0x90;

// Patch memcpy stack
kmem = (uint8_t *)&gKernelBase[0x0028F80D];
kmem[0] = 0xEB;

// ptrace patches
kmem = (uint8_t *)&gKernelBase[0x00361CF5];
kmem[0] = 0xEB;

// second ptrace patch
kmem = (uint8_t *)&gKernelBase[0x003621CF];
kmem[0] = 0xE9;
kmem[1] = 0x7C;
kmem[2] = 0x02;
kmem[3] = 0x00;
kmem[4] = 0x00;

// setlogin patch (for autolaunch check)
kmem = (uint8_t *)&gKernelBase[0x0037CF6C];
kmem[0] = 0x48;
kmem[1] = 0x31;
kmem[2] = 0xC0;
kmem[3] = 0x90;
kmem[4] = 0x90;

// Patch to remove vm_fault: fault on nofault entry, addr %llx
kmem = (uint8_t *)&gKernelBase[0x003DF2A6];
kmem[0] = 0x90;
kmem[1] = 0x90;
kmem[2] = 0x90;
kmem[3] = 0x90;
kmem[4] = 0x90;
kmem[5] = 0x90;

// Patch mprotect: Allow RWX (mprotect) mapping
kmem = (uint8_t *)&gKernelBase[0x003014C8];
kmem[0] = 0x90;
kmem[1] = 0x90;
kmem[2] = 0x90;
kmem[3] = 0x90;
kmem[4] = 0x90;
kmem[5] = 0x90;

// flatz disable pfs signature check
kmem = (uint8_t *)&gKernelBase[0x006DD9A0];
kmem[0] = 0x31;
kmem[1] = 0xC0;
kmem[2] = 0xC3;

// flatz enable debug RIFs
kmem = (uint8_t *)&gKernelBase[0x00668140];
kmem[0] = 0xB0;
kmem[1] = 0x01;
kmem[2] = 0xC3;

kmem = (uint8_t *)&gKernelBase[0x00668170];
kmem[0] = 0xB0;
kmem[1] = 0x01;
kmem[2] = 0xC3;

// Enable *all* debugging logs (in vprintf)
// Patch by: SiSTRo
kmem = (uint8_t *)&gKernelBase[0x0026F827];
kmem[0] = 0xEB;
kmem[1] = 0x3B;

// flatz allow mangled symbol in dynlib_do_dlsym
kmem = (uint8_t *)&gKernelBase[0x000271A7];
kmem[0] = 0x90;
kmem[1] = 0x90;
kmem[2] = 0x90;
kmem[3] = 0x90;
kmem[4] = 0x90;
kmem[5] = 0x90;

// Enable mount for unprivileged user
kmem = (uint8_t *)&gKernelBase[0x00076385];
kmem[0] = 0x90;
kmem[1] = 0x90;
kmem[2] = 0x90;
kmem[3] = 0x90;
kmem[4] = 0x90;
kmem[5] = 0x90;

// patch suword_lwpid
// has a check to see if child_tid/parent_tid is in kernel memory, and it in so patch it
// Patch by: JOGolden
kmem = (uint8_t *)&gKernelBase[0x0028FD12];
kmem[0] = 0x90;
kmem[1] = 0x90;

kmem = (uint8_t *)&gKernelBase[0x0028FD21];
kmem[0] = 0x90;
kmem[1] = 0x90;

// Patch debug setting errors
kmem = (uint8_t *)&gKernelBase[0x004FF322];
kmem[0] = 0x00;
kmem[1] = 0x00;
kmem[2] = 0x00;
kmem[3] = 0x00;

kmem = (uint8_t *)&gKernelBase[0x0050059C];
kmem[0] = 0x00;
kmem[1] = 0x00;
kmem[2] = 0x00;
kmem[3] = 0x00;

#endif
}
2 changes: 1 addition & 1 deletion kernel/src/Plugins/DebugSettings/DebugSettings.hpp
Expand Up @@ -9,7 +9,7 @@ namespace Mira
class DebugSettingsActivator : public Mira::Utils::IModule
{
public:
#if MIRA_PLATFORM == MIRA_PLATFORM_ORBIS_BSD_755 || MIRA_PLATFORM == MIRA_PLATFORM_ORBIS_BSD_750
#if MIRA_PLATFORM >= MIRA_PLATFORM_ORBIS_BSD_750
static constexpr int SYSCTL_DEBUG_1 = 1208; //machdep.rcmgr_debug_menu
static constexpr int SYSCTL_DEBUG_2 = 1218; //machdep.rcmgr_utoken_store_mode
#else
Expand Down
2 changes: 2 additions & 0 deletions kernel/src/Utils/Kdlsym.hpp
Expand Up @@ -36,6 +36,8 @@ extern "C" {
#include "Kdlsym/Orbis672.hpp"
#elif MIRA_PLATFORM==MIRA_PLATFORM_ORBIS_BSD_750
#include "Kdlsym/Orbis750.hpp"
#elif MIRA_PLATFORM==MIRA_PLATFORM_ORBIS_BSD_751
#include "Kdlsym/Orbis751.hpp"
#elif MIRA_PLATFORM==MIRA_PLATFORM_ORBIS_BSD_755
#include "Kdlsym/Orbis755.hpp"
#endif
Expand Down

0 comments on commit b1b556b

Please sign in to comment.