Use the function patcher module for the plugin function patches

This commit is contained in:
Maschell
2020-06-13 16:57:53 +02:00
parent df577e526c
commit 586ed091d7
9 changed files with 25 additions and 485 deletions

View File

@@ -18,11 +18,12 @@
#include <wups.h>
#include <string>
#include <function_patcher/fpatching_defines.h>
class FunctionData {
public:
FunctionData(void *paddress, void *vaddress, const std::string &name, wups_loader_library_type_t library, void *replaceAddr, void *replaceCall) {
FunctionData(void *paddress, void *vaddress, const std::string &name, function_replacement_library_type_t library, void *replaceAddr, void *replaceCall) {
this->paddress = paddress;
this->vaddress = vaddress;
this->name = name;
@@ -39,7 +40,7 @@ public:
return this->name;
}
wups_loader_library_type_t getLibrary() const {
function_replacement_library_type_t getLibrary() const {
return this->library;
}
@@ -63,7 +64,7 @@ private:
void *paddress = NULL;
void *vaddress = NULL;
std::string name;
wups_loader_library_type_t library;
function_replacement_library_type_t library;
void *replaceAddr = NULL;
void *replaceCall = NULL;
};

View File

@@ -97,7 +97,7 @@ bool PluginContainerPersistence::savePlugin(plugin_information_t *pluginInformat
/* Store function replacement information */
uint32_t i = 0;
for (auto &curFunction : pluginInfo.getFunctionDataList()) {
replacement_data_function_t *function_data = &plugin_data->info.functions[i];
function_replacement_data_t *function_data = &plugin_data->info.functions[i];
if (strlen(curFunction.getName().c_str()) > MAXIMUM_FUNCTION_NAME_LENGTH - 1) {
DEBUG_FUNCTION_LINE("Could not add function \"%s\" for plugin \"%s\" function name is too long.", curFunction.getName().c_str(), pluginName.c_str());
continue;
@@ -107,11 +107,13 @@ bool PluginContainerPersistence::savePlugin(plugin_information_t *pluginInformat
strncpy(function_data->function_name, curFunction.getName().c_str(), MAXIMUM_FUNCTION_NAME_LENGTH - 1);
function_data->library = curFunction.getLibrary();
function_data->VERSION = FUNCTION_REPLACEMENT_DATA_STRUCT_VERSION;
function_data->library = (function_replacement_library_type_t) curFunction.getLibrary();
function_data->replaceAddr = (uint32_t) curFunction.getReplaceAddress();
function_data->replaceCall = (uint32_t) curFunction.getReplaceCall();
function_data->physicalAddr = (uint32_t) curFunction.getPhysicalAddress();
function_data->virtualAddr = (uint32_t) curFunction.getVirtualAddress();
function_data->targetProcess = FP_TARGET_PROCESS_GAME_AND_MENU;
plugin_data->info.number_used_functions++;
i++;
@@ -247,8 +249,8 @@ std::vector<PluginContainer> PluginContainerPersistence::loadPlugins(plugin_info
}
for (uint32_t j = 0; j < functionReplaceCount; j++) {
replacement_data_function_t *entry = &(plugin_data->info.functions[j]);
FunctionData func((void *) entry->physicalAddr, (void *) entry->virtualAddr, entry->function_name, entry->library, (void *) entry->replaceAddr, (void *) entry->replaceCall);
function_replacement_data_t *entry = &(plugin_data->info.functions[j]);
FunctionData func((void *) entry->physicalAddr, (void *) entry->virtualAddr, entry->function_name, (function_replacement_library_type_t) entry->library, (void *) entry->replaceAddr, (void *) entry->replaceCall);
pluginInformation.addFunctionData(func);
}

View File

@@ -197,7 +197,7 @@ std::optional<PluginInformation> PluginInformationFactory::load(const PluginData
wups_loader_entry_t *cur_function = &entries[j];
DEBUG_FUNCTION_LINE("Saving function \"%s\" of plugin . PA:%08X VA:%08X Library: %08X, target: %08X, call_addr: %08X", cur_function->_function.name/*,pluginData.getPluginInformation()->getName().c_str()*/,
cur_function->_function.physical_address, cur_function->_function.virtual_address, cur_function->_function.library, cur_function->_function.target, (void *) cur_function->_function.call_addr);
FunctionData function_data((void *) cur_function->_function.physical_address, (void *) cur_function->_function.virtual_address, cur_function->_function.name, cur_function->_function.library,
FunctionData function_data((void *) cur_function->_function.physical_address, (void *) cur_function->_function.virtual_address, cur_function->_function.name, (function_replacement_library_type_t) cur_function->_function.library,
(void *) cur_function->_function.target, (void *) cur_function->_function.call_addr);
pluginInfo.addFunctionData(function_data);
}