-improved homebrew boot compatility

This commit is contained in:
fix94.1 2012-08-17 18:28:39 +00:00
parent 088ae57074
commit bcfae365b1

View File

@ -6,8 +6,6 @@
#include <vector> #include <vector>
#include <string> #include <string>
#include "gecko/gecko.h" #include "gecko/gecko.h"
#include "memory/mem2.hpp"
#include "memory/smartptr.hpp"
#define EXECUTE_ADDR ((u8 *)0x92000000) #define EXECUTE_ADDR ((u8 *)0x92000000)
#define BOOTER_ADDR ((u8 *)0x93000000) #define BOOTER_ADDR ((u8 *)0x93000000)
@ -28,16 +26,17 @@ u32 buffer_size = 0;
static vector<string> Arguments; static vector<string> Arguments;
bool IsDollZ (u8 *buff) static bool IsDollZ(u8 *buf)
{ {
u8 dollz_stamp[] = {0x3C}; u8 cmp1[] = {0x3C};
int dollz_offs = 0x100; return memcmp(&buf[0x100], cmp1, sizeof(cmp1)) == 0;
}
int ret = memcmp (&buff[dollz_offs], dollz_stamp, sizeof(dollz_stamp)); static bool IsSpecialELF(u8 *buf)
if (ret == 0) {
return true; u32 cmp1[] = {0x7F454C46};
u8 cmp2[] = {0x00};
return false; return memcmp(buf, cmp1, sizeof(cmp1)) == 0 && memcmp(&buf[0x24], cmp2, sizeof(cmp2)) == 0;
} }
void AddBootArgument(const char * argv) void AddBootArgument(const char * argv)
@ -119,8 +118,10 @@ void writeStub()
int BootHomebrew() int BootHomebrew()
{ {
struct __argv args; struct __argv args;
if (!IsDollZ(EXECUTE_ADDR)) if(!IsDollZ(EXECUTE_ADDR) && !IsSpecialELF(EXECUTE_ADDR))
SetupARGV(&args); SetupARGV(&args);
else
gprintf("Homebrew Boot Arguments disabled\n");
memcpy(BOOTER_ADDR, app_booter_bin, app_booter_bin_size); memcpy(BOOTER_ADDR, app_booter_bin, app_booter_bin_size);
DCFlushRange(BOOTER_ADDR, app_booter_bin_size); DCFlushRange(BOOTER_ADDR, app_booter_bin_size);