relocator: formatting

This commit is contained in:
Maschell 2020-06-01 16:38:13 +02:00
parent 29c90bc943
commit 985691e608
4 changed files with 30 additions and 29 deletions

View File

@ -52,24 +52,24 @@ bool doRelocation(std::vector<RelocationData> &relocData, relocation_trampolin_e
uint32_t functionAddress = 0; uint32_t functionAddress = 0;
if (replaceAllocFunctions) { if (replaceAllocFunctions) {
if(functionName.compare("MEMAllocFromDefaultHeap") == 0){ if (functionName.compare("MEMAllocFromDefaultHeap") == 0) {
OSDynLoad_Module rplHandle; OSDynLoad_Module rplHandle;
OSDynLoad_Acquire("homebrew_memorymapping", &rplHandle); OSDynLoad_Acquire("homebrew_memorymapping", &rplHandle);
OSDynLoad_FindExport(rplHandle, 1, "MEMAllocFromMappedMemory", (void **) &functionAddress); OSDynLoad_FindExport(rplHandle, 1, "MEMAllocFromMappedMemory", (void **) &functionAddress);
}else if(functionName.compare("MEMAllocFromDefaultHeapEx") == 0){ } else if (functionName.compare("MEMAllocFromDefaultHeapEx") == 0) {
OSDynLoad_Module rplHandle; OSDynLoad_Module rplHandle;
OSDynLoad_Acquire("homebrew_memorymapping", &rplHandle); OSDynLoad_Acquire("homebrew_memorymapping", &rplHandle);
OSDynLoad_FindExport(rplHandle, 1, "MEMAllocFromMappedMemoryEx", (void **) &functionAddress); OSDynLoad_FindExport(rplHandle, 1, "MEMAllocFromMappedMemoryEx", (void **) &functionAddress);
}else if(functionName.compare("MEMFreeToDefaultHeap") == 0){ } else if (functionName.compare("MEMFreeToDefaultHeap") == 0) {
OSDynLoad_Module rplHandle; OSDynLoad_Module rplHandle;
OSDynLoad_Acquire("homebrew_memorymapping", &rplHandle); OSDynLoad_Acquire("homebrew_memorymapping", &rplHandle);
OSDynLoad_FindExport(rplHandle, 1, "MEMFreeToMappedMemory", (void **) &functionAddress); OSDynLoad_FindExport(rplHandle, 1, "MEMFreeToMappedMemory", (void **) &functionAddress);
} }
if(functionAddress != 0){ if (functionAddress != 0) {
// DEBUG_FUNCTION_LINE("Using memorymapping function %08X %08X\n", functionAddress, *((uint32_t*)functionAddress)); // DEBUG_FUNCTION_LINE("Using memorymapping function %08X %08X\n", functionAddress, *((uint32_t*)functionAddress));
} }
} }
if(functionAddress == 0){ if (functionAddress == 0) {
int32_t isData = curReloc.getImportRPLInformation().isData(); int32_t isData = curReloc.getImportRPLInformation().isData();
OSDynLoad_Module rplHandle = 0; OSDynLoad_Module rplHandle = 0;
if (moduleCache.count(rplName) == 0) { if (moduleCache.count(rplName) == 0) {
@ -104,8 +104,8 @@ bool ResolveRelocations(const std::vector<ModuleData> &loadedModules, bool repla
if (wasSuccessful) { if (wasSuccessful) {
std::vector<RelocationData> relocData = curModule.getRelocationDataList(); std::vector<RelocationData> relocData = curModule.getRelocationDataList();
bool replaceAlloc = replaceAllocFunctions; bool replaceAlloc = replaceAllocFunctions;
if(replaceAlloc){ if (replaceAlloc) {
if(curModule.getExportName().compare("homebrew_memorymapping") == 0){ if (curModule.getExportName().compare("homebrew_memorymapping") == 0) {
DEBUG_FUNCTION_LINE("Skip malloc replacement for mapping\n"); DEBUG_FUNCTION_LINE("Skip malloc replacement for mapping\n");
replaceAlloc = false; replaceAlloc = false;
} }
@ -144,16 +144,16 @@ extern "C" void doStart(int argc, char **argv) {
gInitCalled = 1; gInitCalled = 1;
DEBUG_FUNCTION_LINE("Resolve relocations without replacing alloc functions\n"); DEBUG_FUNCTION_LINE("Resolve relocations without replacing alloc functions\n");
ResolveRelocations(loadedModules, false); ResolveRelocations(loadedModules, false);
for(auto& curModule : loadedModules){ for (auto &curModule : loadedModules) {
if(curModule.getExportName().compare("homebrew_memorymapping") == 0){ if (curModule.getExportName().compare("homebrew_memorymapping") == 0) {
for(auto& curExport : curModule.getExportDataList()){ for (auto &curExport : curModule.getExportDataList()) {
if(curExport.getName().compare("MemoryMappingEffectiveToPhysical") == 0){ if (curExport.getName().compare("MemoryMappingEffectiveToPhysical") == 0) {
CallHook(loadedModules, WUMS_HOOK_INIT); CallHook(loadedModules, WUMS_HOOK_INIT);
DEBUG_FUNCTION_LINE("Setting MemoryMappingEffectiveToPhysicalPTR to %08X\n", curExport.getAddress()); DEBUG_FUNCTION_LINE("Setting MemoryMappingEffectiveToPhysicalPTR to %08X\n", curExport.getAddress());
MemoryMappingEffectiveToPhysicalPTR = (uint32_t) curExport.getAddress(); MemoryMappingEffectiveToPhysicalPTR = (uint32_t) curExport.getAddress();
}else if(curExport.getName().compare("MemoryMappingPhysicalToEffective") == 0){ } else if (curExport.getName().compare("MemoryMappingPhysicalToEffective") == 0) {
DEBUG_FUNCTION_LINE("Setting MemoryMappingPhysicalToEffectivePTR to %08X\n", curExport.getAddress()); DEBUG_FUNCTION_LINE("Setting MemoryMappingPhysicalToEffectivePTR to %08X\n", curExport.getAddress());
MemoryMappingPhysicalToEffectivePTR = (uint32_t) curExport.getAddress(); MemoryMappingPhysicalToEffectivePTR = (uint32_t) curExport.getAddress();
} }
@ -167,7 +167,7 @@ extern "C" void doStart(int argc, char **argv) {
ResolveRelocations(loadedModules, true); ResolveRelocations(loadedModules, true);
for (int i = 0; i < gModuleData->number_used_modules; i++) { for (int i = 0; i < gModuleData->number_used_modules; i++) {
if(strcmp(gModuleData->module_data[i].module_export_name, "homebrew_memorymapping") == 0){ if (strcmp(gModuleData->module_data[i].module_export_name, "homebrew_memorymapping") == 0) {
DEBUG_FUNCTION_LINE("About to call memory mapping (%08X)\n", gModuleData->module_data[i].entrypoint); DEBUG_FUNCTION_LINE("About to call memory mapping (%08X)\n", gModuleData->module_data[i].entrypoint);
int ret = ((int (*)(int, char **)) (gModuleData->module_data[i].entrypoint))(argc, argv); int ret = ((int (*)(int, char **)) (gModuleData->module_data[i].entrypoint))(argc, argv);
DEBUG_FUNCTION_LINE("return code was %d\n", ret); DEBUG_FUNCTION_LINE("return code was %d\n", ret);
@ -176,7 +176,7 @@ extern "C" void doStart(int argc, char **argv) {
} }
for (int i = 0; i < gModuleData->number_used_modules; i++) { for (int i = 0; i < gModuleData->number_used_modules; i++) {
if(strcmp(gModuleData->module_data[i].module_export_name, "homebrew_memorymapping") != 0) { if (strcmp(gModuleData->module_data[i].module_export_name, "homebrew_memorymapping") != 0) {
DEBUG_FUNCTION_LINE("About to call %08X\n", gModuleData->module_data[i].entrypoint); DEBUG_FUNCTION_LINE("About to call %08X\n", gModuleData->module_data[i].entrypoint);
int ret = ((int (*)(int, char **)) (gModuleData->module_data[i].entrypoint))(argc, argv); int ret = ((int (*)(int, char **)) (gModuleData->module_data[i].entrypoint))(argc, argv);
DEBUG_FUNCTION_LINE("return code was %d\n", ret); DEBUG_FUNCTION_LINE("return code was %d\n", ret);

View File

@ -5,4 +5,4 @@
#include <vector> #include <vector>
#include "../../source/module/ModuleData.h" #include "../../source/module/ModuleData.h"
void CallHook(const std::vector<ModuleData>& modules, wums_hook_type_t type); void CallHook(const std::vector<ModuleData> &modules, wums_hook_type_t type);

View File

@ -56,7 +56,7 @@ DECL(OSDynLoad_Error, OSDynLoad_FindExport, OSDynLoad_Module module, BOOL isData
DECL(int32_t, KiEffectiveToPhysical, uint32_t addressSpace, uint32_t virtualAddress) { DECL(int32_t, KiEffectiveToPhysical, uint32_t addressSpace, uint32_t virtualAddress) {
int32_t result = real_KiEffectiveToPhysical(addressSpace, virtualAddress); int32_t result = real_KiEffectiveToPhysical(addressSpace, virtualAddress);
if (result == 0) { if (result == 0) {
if(MemoryMappingEffectiveToPhysicalPTR != 0){ if (MemoryMappingEffectiveToPhysicalPTR != 0) {
return ((uint32_t (*)(uint32_t)) ((uint32_t *) MemoryMappingEffectiveToPhysicalPTR))(virtualAddress); return ((uint32_t (*)(uint32_t)) ((uint32_t *) MemoryMappingEffectiveToPhysicalPTR))(virtualAddress);
} }
} }
@ -66,7 +66,7 @@ DECL(int32_t, KiEffectiveToPhysical, uint32_t addressSpace, uint32_t virtualAddr
DECL(int32_t, KiPhysicalToEffectiveCached, uint32_t addressSpace, uint32_t virtualAddress) { DECL(int32_t, KiPhysicalToEffectiveCached, uint32_t addressSpace, uint32_t virtualAddress) {
int32_t result = real_KiPhysicalToEffectiveCached(addressSpace, virtualAddress); int32_t result = real_KiPhysicalToEffectiveCached(addressSpace, virtualAddress);
if (result == 0) { if (result == 0) {
if(MemoryMappingPhysicalToEffectivePTR != 0){ if (MemoryMappingPhysicalToEffectivePTR != 0) {
return ((uint32_t (*)(uint32_t)) ((uint32_t *) MemoryMappingPhysicalToEffectivePTR))(virtualAddress); return ((uint32_t (*)(uint32_t)) ((uint32_t *) MemoryMappingPhysicalToEffectivePTR))(virtualAddress);
} }
} }
@ -76,7 +76,7 @@ DECL(int32_t, KiPhysicalToEffectiveCached, uint32_t addressSpace, uint32_t virtu
DECL(int32_t, KiPhysicalToEffectiveUncached, uint32_t addressSpace, uint32_t virtualAddress) { DECL(int32_t, KiPhysicalToEffectiveUncached, uint32_t addressSpace, uint32_t virtualAddress) {
int32_t result = real_KiPhysicalToEffectiveUncached(addressSpace, virtualAddress); int32_t result = real_KiPhysicalToEffectiveUncached(addressSpace, virtualAddress);
if (result == 0) { if (result == 0) {
if(MemoryMappingPhysicalToEffectivePTR != 0){ if (MemoryMappingPhysicalToEffectivePTR != 0) {
return ((uint32_t (*)(uint32_t)) ((uint32_t *) MemoryMappingPhysicalToEffectivePTR))(virtualAddress); return ((uint32_t (*)(uint32_t)) ((uint32_t *) MemoryMappingPhysicalToEffectivePTR))(virtualAddress);
} }
} }
@ -85,10 +85,10 @@ DECL(int32_t, KiPhysicalToEffectiveUncached, uint32_t addressSpace, uint32_t vir
DECL(uint32_t, IPCKDriver_ValidatePhysicalAddress, uint32_t u1, uint32_t physStart, uint32_t physEnd) { DECL(uint32_t, IPCKDriver_ValidatePhysicalAddress, uint32_t u1, uint32_t physStart, uint32_t physEnd) {
uint32_t result = 0; uint32_t result = 0;
if(MemoryMappingPhysicalToEffectivePTR != 0){ if (MemoryMappingPhysicalToEffectivePTR != 0) {
result = ((uint32_t (*)(uint32_t)) ((uint32_t *) MemoryMappingPhysicalToEffectivePTR))(physStart) > 0; result = ((uint32_t (*)(uint32_t)) ((uint32_t *) MemoryMappingPhysicalToEffectivePTR))(physStart) > 0;
} }
if(result){ if (result) {
return result; return result;
} }
@ -98,7 +98,8 @@ DECL(uint32_t, IPCKDriver_ValidatePhysicalAddress, uint32_t u1, uint32_t physSta
DECL(uint32_t, KiIsEffectiveRangeValid, uint32_t addressSpace, uint32_t virtualAddress, uint32_t size) { DECL(uint32_t, KiIsEffectiveRangeValid, uint32_t addressSpace, uint32_t virtualAddress, uint32_t size) {
uint32_t result = real_KiIsEffectiveRangeValid(addressSpace, virtualAddress, size); uint32_t result = real_KiIsEffectiveRangeValid(addressSpace, virtualAddress, size);
if (result == 0) { if (result == 0) {
if(MemoryMappingEffectiveToPhysicalPTR != 0){ return 1;
if (MemoryMappingEffectiveToPhysicalPTR != 0) {
return ((uint32_t (*)(uint32_t)) ((uint32_t *) MemoryMappingEffectiveToPhysicalPTR))(virtualAddress) > 0; return ((uint32_t (*)(uint32_t)) ((uint32_t *) MemoryMappingEffectiveToPhysicalPTR))(virtualAddress) > 0;
} }
} }

View File

@ -99,9 +99,9 @@ void PatchInvidualMethodHooks(hooks_magic_t method_hooks[], int32_t hook_informa
if (DEBUG_LOG_DYN) { if (DEBUG_LOG_DYN) {
DEBUG_FUNCTION_LINE("%s is located at %08X!", method_hooks[i].functionName, real_addr); DEBUG_FUNCTION_LINE("%s is located at %08X!", method_hooks[i].functionName, real_addr);
} }
if(real_addr > 0xF0000000){ if (real_addr > 0xF0000000) {
physical = real_addr; physical = real_addr;
}else{ } else {
physical = (uint32_t) OSEffectiveToPhysical(real_addr); physical = (uint32_t) OSEffectiveToPhysical(real_addr);
if (!physical) { if (!physical) {
DEBUG_FUNCTION_LINE("Error. Something is wrong with the physical address\n"); DEBUG_FUNCTION_LINE("Error. Something is wrong with the physical address\n");
@ -247,15 +247,15 @@ int32_t isDynamicFunction(uint32_t physicalAddress) {
uint32_t GetAddressOfFunction(const char *functionName, uint32_t library) { uint32_t GetAddressOfFunction(const char *functionName, uint32_t library) {
uint32_t real_addr = 0; uint32_t real_addr = 0;
if(strcmp(functionName, "KiEffectiveToPhysical") == 0){ if (strcmp(functionName, "KiEffectiveToPhysical") == 0) {
return 0xffee0aac; return 0xffee0aac;
}else if(strcmp(functionName, "KiPhysicalToEffectiveCached") == 0){ } else if (strcmp(functionName, "KiPhysicalToEffectiveCached") == 0) {
return 0xffee0a3c; return 0xffee0a3c;
}else if(strcmp(functionName, "KiPhysicalToEffectiveUncached") == 0){ } else if (strcmp(functionName, "KiPhysicalToEffectiveUncached") == 0) {
return 0xffee0a80; return 0xffee0a80;
}else if(strcmp(functionName, "IPCKDriver_ValidatePhysicalAddress") == 0){ } else if (strcmp(functionName, "IPCKDriver_ValidatePhysicalAddress") == 0) {
return 0xfff0cb5c; return 0xfff0cb5c;
}else if(strcmp(functionName, "KiIsEffectiveRangeValid") == 0){ } else if (strcmp(functionName, "KiIsEffectiveRangeValid") == 0) {
return 0xffee0d6c; return 0xffee0d6c;
} }