mirror of
https://github.com/wiiu-env/WiiUPluginLoaderBackend.git
synced 2026-08-11 12:16:06 -05:00
Use std::shared_ptr
This commit is contained in:
@@ -1,5 +1,7 @@
|
||||
#include <coreinit/cache.h>
|
||||
|
||||
#include <memory>
|
||||
|
||||
#include "PluginContainer.h"
|
||||
#include "PluginInformationFactory.h"
|
||||
#include "PluginMetaInformationFactory.h"
|
||||
@@ -7,10 +9,10 @@
|
||||
#include "PluginDataPersistence.h"
|
||||
#include "DynamicLinkingHelper.h"
|
||||
|
||||
bool PluginContainerPersistence::savePlugin(plugin_information_t *pluginInformation, PluginContainer &plugin, MEMHeapHandle heapHandle) {
|
||||
bool PluginContainerPersistence::savePlugin(plugin_information_t *pluginInformation, const std::shared_ptr<PluginContainer> &plugin, MEMHeapHandle heapHandle) {
|
||||
int32_t plugin_count = pluginInformation->number_used_plugins;
|
||||
|
||||
auto pluginName = plugin.getMetaInformation().getName();
|
||||
auto pluginName = plugin->getMetaInformation()->getName();
|
||||
|
||||
if (plugin_count >= MAXIMUM_PLUGINS - 1) {
|
||||
DEBUG_FUNCTION_LINE("Maximum of %d plugins reached. %s won't be loaded!", MAXIMUM_PLUGINS, pluginName.c_str());
|
||||
@@ -22,50 +24,50 @@ bool PluginContainerPersistence::savePlugin(plugin_information_t *pluginInformat
|
||||
// Make sure everything is reset.
|
||||
memset((void *) plugin_data, 0, sizeof(plugin_information_single_t));
|
||||
|
||||
const auto &pluginMetaInfo = plugin.getMetaInformation();
|
||||
const auto &pluginMetaInfo = plugin->getMetaInformation();
|
||||
auto plugin_meta_data = &plugin_data->meta;
|
||||
|
||||
if (pluginMetaInfo.getName().size() >= MAXIMUM_PLUGIN_META_FIELD_LENGTH) {
|
||||
if (pluginMetaInfo->getName().size() >= MAXIMUM_PLUGIN_META_FIELD_LENGTH) {
|
||||
DEBUG_FUNCTION_LINE("Warning: name will be truncated.");
|
||||
}
|
||||
strncpy(plugin_meta_data->name, pluginMetaInfo.getName().c_str(), MAXIMUM_PLUGIN_META_FIELD_LENGTH - 1);
|
||||
if (pluginMetaInfo.getAuthor().size() >= MAXIMUM_PLUGIN_META_FIELD_LENGTH) {
|
||||
strncpy(plugin_meta_data->name, pluginMetaInfo->getName().c_str(), MAXIMUM_PLUGIN_META_FIELD_LENGTH - 1);
|
||||
if (pluginMetaInfo->getAuthor().size() >= MAXIMUM_PLUGIN_META_FIELD_LENGTH) {
|
||||
DEBUG_FUNCTION_LINE("Warning: author will be truncated.");
|
||||
}
|
||||
strncpy(plugin_meta_data->author, pluginMetaInfo.getAuthor().c_str(), MAXIMUM_PLUGIN_META_FIELD_LENGTH - 1);
|
||||
strncpy(plugin_meta_data->author, pluginMetaInfo->getAuthor().c_str(), MAXIMUM_PLUGIN_META_FIELD_LENGTH - 1);
|
||||
|
||||
if (pluginMetaInfo.getVersion().size() >= MAXIMUM_PLUGIN_META_FIELD_LENGTH) {
|
||||
if (pluginMetaInfo->getVersion().size() >= MAXIMUM_PLUGIN_META_FIELD_LENGTH) {
|
||||
DEBUG_FUNCTION_LINE("Warning: version will be truncated.");
|
||||
}
|
||||
strncpy(plugin_meta_data->version, pluginMetaInfo.getVersion().c_str(), MAXIMUM_PLUGIN_META_FIELD_LENGTH - 1);
|
||||
strncpy(plugin_meta_data->version, pluginMetaInfo->getVersion().c_str(), MAXIMUM_PLUGIN_META_FIELD_LENGTH - 1);
|
||||
|
||||
if (pluginMetaInfo.getLicense().size() >= MAXIMUM_PLUGIN_META_FIELD_LENGTH) {
|
||||
if (pluginMetaInfo->getLicense().size() >= MAXIMUM_PLUGIN_META_FIELD_LENGTH) {
|
||||
DEBUG_FUNCTION_LINE("Warning: license will be truncated.");
|
||||
}
|
||||
strncpy(plugin_meta_data->license, pluginMetaInfo.getLicense().c_str(), MAXIMUM_PLUGIN_META_FIELD_LENGTH - 1);
|
||||
strncpy(plugin_meta_data->license, pluginMetaInfo->getLicense().c_str(), MAXIMUM_PLUGIN_META_FIELD_LENGTH - 1);
|
||||
|
||||
if (pluginMetaInfo.getBuildTimestamp().size() >= MAXIMUM_PLUGIN_META_FIELD_LENGTH) {
|
||||
if (pluginMetaInfo->getBuildTimestamp().size() >= MAXIMUM_PLUGIN_META_FIELD_LENGTH) {
|
||||
DEBUG_FUNCTION_LINE("Warning: build timestamp will be truncated.");
|
||||
}
|
||||
strncpy(plugin_meta_data->buildTimestamp, pluginMetaInfo.getBuildTimestamp().c_str(), MAXIMUM_PLUGIN_META_FIELD_LENGTH - 1);
|
||||
strncpy(plugin_meta_data->buildTimestamp, pluginMetaInfo->getBuildTimestamp().c_str(), MAXIMUM_PLUGIN_META_FIELD_LENGTH - 1);
|
||||
|
||||
if (pluginMetaInfo.getDescription().size() >= MAXIMUM_PLUGIN_DESCRIPTION_LENGTH) {
|
||||
if (pluginMetaInfo->getDescription().size() >= MAXIMUM_PLUGIN_DESCRIPTION_LENGTH) {
|
||||
DEBUG_FUNCTION_LINE("Warning: description will be truncated.");
|
||||
DEBUG_FUNCTION_LINE("%s", pluginMetaInfo.getDescription().c_str());
|
||||
DEBUG_FUNCTION_LINE("%s", pluginMetaInfo->getDescription().c_str());
|
||||
}
|
||||
strncpy(plugin_meta_data->descripion, pluginMetaInfo.getDescription().c_str(), MAXIMUM_PLUGIN_DESCRIPTION_LENGTH - 1);
|
||||
strncpy(plugin_meta_data->descripion, pluginMetaInfo->getDescription().c_str(), MAXIMUM_PLUGIN_DESCRIPTION_LENGTH - 1);
|
||||
|
||||
if (pluginMetaInfo.getStorageId().length() >= MAXIMUM_PLUGIN_META_FIELD_LENGTH) {
|
||||
if (pluginMetaInfo->getStorageId().length() >= MAXIMUM_PLUGIN_META_FIELD_LENGTH) {
|
||||
DEBUG_FUNCTION_LINE("Warning: plugin storage id will be truncated.");
|
||||
}
|
||||
strncpy(plugin_meta_data->storageId, pluginMetaInfo.getStorageId().c_str(), MAXIMUM_PLUGIN_META_FIELD_LENGTH - 1);
|
||||
strncpy(plugin_meta_data->storageId, pluginMetaInfo->getStorageId().c_str(), MAXIMUM_PLUGIN_META_FIELD_LENGTH - 1);
|
||||
|
||||
plugin_meta_data->size = pluginMetaInfo.getSize();
|
||||
plugin_meta_data->size = pluginMetaInfo->getSize();
|
||||
|
||||
auto pluginInfo = plugin.getPluginInformation();
|
||||
auto pluginInfo = plugin->getPluginInformation();
|
||||
|
||||
// Relocation
|
||||
std::vector<RelocationData> relocationData = pluginInfo.getRelocationDataList();
|
||||
auto relocationData = pluginInfo->getRelocationDataList();
|
||||
for (auto &reloc: relocationData) {
|
||||
if (!DynamicLinkingHelper::addReloationEntry(&(pluginInformation->linking_data), plugin_data->info.linking_entries, PLUGIN_DYN_LINK_RELOCATION_LIST_LENGTH, reloc)) {
|
||||
DEBUG_FUNCTION_LINE("Failed to add a relocation entry");
|
||||
@@ -73,8 +75,8 @@ bool PluginContainerPersistence::savePlugin(plugin_information_t *pluginInformat
|
||||
}
|
||||
}
|
||||
|
||||
std::vector<FunctionData> function_data_list = pluginInfo.getFunctionDataList();
|
||||
std::vector<HookData> hook_data_list = pluginInfo.getHookDataList();
|
||||
auto function_data_list = pluginInfo->getFunctionDataList();
|
||||
auto hook_data_list = pluginInfo->getHookDataList();
|
||||
|
||||
if (function_data_list.size() > MAXIMUM_FUNCTION_PER_PLUGIN) {
|
||||
DEBUG_FUNCTION_LINE("Plugin %s would replace to many function (%d, maximum is %d). It won't be loaded.", pluginName.c_str(), function_data_list.size(), MAXIMUM_FUNCTION_PER_PLUGIN);
|
||||
@@ -92,48 +94,48 @@ bool PluginContainerPersistence::savePlugin(plugin_information_t *pluginInformat
|
||||
|
||||
/* Store function replacement information */
|
||||
uint32_t i = 0;
|
||||
for (auto &curFunction: pluginInfo.getFunctionDataList()) {
|
||||
for (auto &curFunction: pluginInfo->getFunctionDataList()) {
|
||||
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());
|
||||
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;
|
||||
}
|
||||
|
||||
DEBUG_FUNCTION_LINE_VERBOSE("Adding function \"%s\" for plugin \"%s\"", curFunction.getName().c_str(), pluginName.c_str());
|
||||
DEBUG_FUNCTION_LINE_VERBOSE("Adding function \"%s\" for plugin \"%s\"", curFunction->getName().c_str(), pluginName.c_str());
|
||||
|
||||
strncpy(function_data->function_name, curFunction.getName().c_str(), MAXIMUM_FUNCTION_NAME_LENGTH - 1);
|
||||
strncpy(function_data->function_name, curFunction->getName().c_str(), MAXIMUM_FUNCTION_NAME_LENGTH - 1);
|
||||
|
||||
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 = curFunction.getTargetProcess();
|
||||
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 = curFunction->getTargetProcess();
|
||||
|
||||
plugin_data->info.number_used_functions++;
|
||||
i++;
|
||||
}
|
||||
|
||||
i = 0;
|
||||
for (auto &curHook: pluginInfo.getHookDataList()) {
|
||||
for (auto &curHook: pluginInfo->getHookDataList()) {
|
||||
replacement_data_hook_t *hook_data = &plugin_data->info.hooks[i];
|
||||
|
||||
DEBUG_FUNCTION_LINE_VERBOSE("Set hook for plugin \"%s\" of type %08X to target %08X", plugin_data->meta.name, curHook.getType(), (void *) curHook.getFunctionPointer());
|
||||
DEBUG_FUNCTION_LINE_VERBOSE("Set hook for plugin \"%s\" of type %08X to target %08X", plugin_data->meta.name, curHook->getType(), (void *) curHook->getFunctionPointer());
|
||||
|
||||
hook_data->func_pointer = (void *) curHook.getFunctionPointer();
|
||||
hook_data->type = curHook.getType();
|
||||
hook_data->func_pointer = (void *) curHook->getFunctionPointer();
|
||||
hook_data->type = curHook->getType();
|
||||
|
||||
plugin_data->info.number_used_hooks++;
|
||||
i++;
|
||||
}
|
||||
|
||||
/* Saving SectionInfos */
|
||||
for (auto &curSection: pluginInfo.getSectionInfoList()) {
|
||||
for (auto &curSection: pluginInfo->getSectionInfoList()) {
|
||||
bool foundFreeSlot = false;
|
||||
uint32_t slot = 0;
|
||||
for (uint32_t j = 0; j < MAXIMUM_PLUGIN_SECTION_LENGTH; j++) {
|
||||
plugin_section_info_t *sectionInfo = &(plugin_data->info.sectionInfos[j]);
|
||||
auto *sectionInfo = &(plugin_data->info.sectionInfos[j]);
|
||||
if (sectionInfo->addr == 0 && sectionInfo->size == 0) {
|
||||
foundFreeSlot = true;
|
||||
slot = j;
|
||||
@@ -141,31 +143,30 @@ bool PluginContainerPersistence::savePlugin(plugin_information_t *pluginInformat
|
||||
}
|
||||
}
|
||||
if (foundFreeSlot) {
|
||||
plugin_section_info_t *sectionInfo = &(plugin_data->info.sectionInfos[slot]);
|
||||
auto *sectionInfo = &(plugin_data->info.sectionInfos[slot]);
|
||||
if (curSection.first.length() > MAXIMUM_PLUGIN_SECTION_NAME_LENGTH - 1) {
|
||||
DEBUG_FUNCTION_LINE("Could not add section info \"%s\" for plugin \"%s\" section name is too long.", curSection.first.c_str(), pluginName.c_str());
|
||||
break;
|
||||
}
|
||||
strncpy(sectionInfo->name, curSection.first.c_str(), MAXIMUM_PLUGIN_SECTION_NAME_LENGTH - 1);
|
||||
sectionInfo->addr = curSection.second.getAddress();
|
||||
sectionInfo->size = curSection.second.getSize();
|
||||
sectionInfo->addr = curSection.second->getAddress();
|
||||
sectionInfo->size = curSection.second->getSize();
|
||||
|
||||
} else {
|
||||
DEBUG_FUNCTION_LINE("Failed to store SectionInfos");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
plugin_data->info.trampolinId = pluginInfo.getTrampolinId();
|
||||
plugin_data->info.allocatedTextMemoryAddress = pluginInfo.allocatedTextMemoryAddress;
|
||||
plugin_data->info.allocatedDataMemoryAddress = pluginInfo.allocatedDataMemoryAddress;
|
||||
plugin_data->info.trampolinId = pluginInfo->getTrampolinId();
|
||||
plugin_data->info.allocatedTextMemoryAddress = pluginInfo->allocatedTextMemoryAddress;
|
||||
plugin_data->info.allocatedDataMemoryAddress = pluginInfo->allocatedDataMemoryAddress;
|
||||
|
||||
|
||||
uint32_t entryCount = pluginInfo.getFunctionSymbolDataList().size();
|
||||
uint32_t entryCount = pluginInfo->getFunctionSymbolDataList().size();
|
||||
if (entryCount > 0) {
|
||||
/* Saving SectionInfos */
|
||||
// Saving SectionInfos
|
||||
uint32_t funcSymStringLen = 1;
|
||||
for (auto &curFuncSym: pluginInfo.getFunctionSymbolDataList()) {
|
||||
funcSymStringLen += curFuncSym.getName().length() + 1;
|
||||
for (auto &curFuncSym: pluginInfo->getFunctionSymbolDataList()) {
|
||||
funcSymStringLen += curFuncSym->getName().length() + 1;
|
||||
}
|
||||
|
||||
char *stringTable = (char *) MEMAllocFromExpHeapEx(heapHandle, funcSymStringLen, 0x4);
|
||||
@@ -186,12 +187,12 @@ bool PluginContainerPersistence::savePlugin(plugin_information_t *pluginInformat
|
||||
|
||||
uint32_t curStringOffset = 0;
|
||||
uint32_t curEntryIndex = 0;
|
||||
for (auto &curFuncSym: pluginInfo.getFunctionSymbolDataList()) {
|
||||
entryTable[curEntryIndex].address = curFuncSym.getAddress();
|
||||
for (auto &curFuncSym: pluginInfo->getFunctionSymbolDataList()) {
|
||||
entryTable[curEntryIndex].address = curFuncSym->getAddress();
|
||||
entryTable[curEntryIndex].name = &stringTable[curStringOffset];
|
||||
entryTable[curEntryIndex].size = curFuncSym.getSize();
|
||||
auto len = curFuncSym.getName().length() + 1;
|
||||
memcpy(stringTable + curStringOffset, curFuncSym.getName().c_str(), len);
|
||||
entryTable[curEntryIndex].size = curFuncSym->getSize();
|
||||
auto len = curFuncSym->getName().length() + 1;
|
||||
memcpy(stringTable + curStringOffset, curFuncSym->getName().c_str(), len);
|
||||
curStringOffset += len;
|
||||
curEntryIndex++;
|
||||
}
|
||||
@@ -203,7 +204,7 @@ bool PluginContainerPersistence::savePlugin(plugin_information_t *pluginInformat
|
||||
plugin_data->info.number_function_symbol_data = entryCount;
|
||||
|
||||
/* Copy plugin data */
|
||||
auto pluginData = plugin.getPluginData();
|
||||
auto pluginData = plugin->getPluginData();
|
||||
auto plugin_data_data = &plugin_data->data;
|
||||
|
||||
PluginDataPersistence::save(plugin_data_data, pluginData);
|
||||
@@ -216,8 +217,8 @@ bool PluginContainerPersistence::savePlugin(plugin_information_t *pluginInformat
|
||||
return true;
|
||||
}
|
||||
|
||||
std::vector<PluginContainer> PluginContainerPersistence::loadPlugins(plugin_information_t *pluginInformation) {
|
||||
std::vector<PluginContainer> result;
|
||||
std::vector<std::shared_ptr<PluginContainer>> PluginContainerPersistence::loadPlugins(plugin_information_t *pluginInformation) {
|
||||
std::vector<std::shared_ptr<PluginContainer>> result;
|
||||
if (pluginInformation == nullptr) {
|
||||
DEBUG_FUNCTION_LINE("pluginInformation == nullptr");
|
||||
return result;
|
||||
@@ -234,27 +235,27 @@ std::vector<PluginContainer> PluginContainerPersistence::loadPlugins(plugin_info
|
||||
// Copy data from struct.
|
||||
plugin_information_single_t *plugin_data = &(pluginInformation->plugin_data[i]);
|
||||
|
||||
PluginMetaInformation metaInformation;
|
||||
auto metaInformation = std::shared_ptr<PluginMetaInformation>(new PluginMetaInformation);
|
||||
|
||||
plugin_meta_info_t *meta = &(plugin_data->meta);
|
||||
metaInformation.setAuthor(meta->author);
|
||||
metaInformation.setVersion(meta->version);
|
||||
metaInformation.setBuildTimestamp(meta->buildTimestamp);
|
||||
metaInformation.setLicense(meta->license);
|
||||
metaInformation.setDescription(meta->descripion);
|
||||
metaInformation.setSize(meta->size);
|
||||
metaInformation.setName(meta->name);
|
||||
metaInformation.setStorageId(meta->storageId);
|
||||
metaInformation->setAuthor(meta->author);
|
||||
metaInformation->setVersion(meta->version);
|
||||
metaInformation->setBuildTimestamp(meta->buildTimestamp);
|
||||
metaInformation->setLicense(meta->license);
|
||||
metaInformation->setDescription(meta->descripion);
|
||||
metaInformation->setSize(meta->size);
|
||||
metaInformation->setName(meta->name);
|
||||
metaInformation->setStorageId(meta->storageId);
|
||||
|
||||
plugin_data_t *data = &(plugin_data->data);
|
||||
|
||||
PluginData pluginData = PluginDataPersistence::load(data);
|
||||
auto pluginData = PluginDataPersistence::load(data);
|
||||
|
||||
PluginInformation curPluginInformation;
|
||||
auto curPluginInformation = std::make_shared<PluginInformation>();
|
||||
|
||||
curPluginInformation.setTrampolinId(plugin_data->info.trampolinId);
|
||||
curPluginInformation.allocatedTextMemoryAddress = plugin_data->info.allocatedTextMemoryAddress;
|
||||
curPluginInformation.allocatedDataMemoryAddress = plugin_data->info.allocatedDataMemoryAddress;
|
||||
curPluginInformation->setTrampolinId(plugin_data->info.trampolinId);
|
||||
curPluginInformation->allocatedTextMemoryAddress = plugin_data->info.allocatedTextMemoryAddress;
|
||||
curPluginInformation->allocatedDataMemoryAddress = plugin_data->info.allocatedDataMemoryAddress;
|
||||
|
||||
for (auto &curItem: plugin_data->info.sectionInfos) {
|
||||
plugin_section_info_t *sectionInfo = &curItem;
|
||||
@@ -263,7 +264,7 @@ std::vector<PluginContainer> PluginContainerPersistence::loadPlugins(plugin_info
|
||||
}
|
||||
DEBUG_FUNCTION_LINE_VERBOSE("Add SectionInfo %s", sectionInfo->name);
|
||||
std::string name(sectionInfo->name);
|
||||
curPluginInformation.addSectionInfo(SectionInfo(name, sectionInfo->addr, sectionInfo->size));
|
||||
curPluginInformation->addSectionInfo(std::make_shared<SectionInfo>(name, sectionInfo->addr, sectionInfo->size));
|
||||
}
|
||||
|
||||
/* load hook data */
|
||||
@@ -276,14 +277,13 @@ std::vector<PluginContainer> PluginContainerPersistence::loadPlugins(plugin_info
|
||||
|
||||
for (uint32_t j = 0; j < hookCount; j++) {
|
||||
replacement_data_hook_t *hook_entry = &(plugin_data->info.hooks[j]);
|
||||
HookData curHook(hook_entry->func_pointer, hook_entry->type);
|
||||
curPluginInformation.addHookData(curHook);
|
||||
curPluginInformation->addHookData(std::make_shared<HookData>(hook_entry->func_pointer, hook_entry->type));
|
||||
}
|
||||
|
||||
bool storageHasId = true;
|
||||
for (auto const &value: curPluginInformation.getHookDataList()) {
|
||||
if (value.getType() == WUPS_LOADER_HOOK_INIT_STORAGE &&
|
||||
metaInformation.getStorageId().empty()) {
|
||||
for (auto const &value: curPluginInformation->getHookDataList()) {
|
||||
if (value->getType() == WUPS_LOADER_HOOK_INIT_STORAGE &&
|
||||
metaInformation->getStorageId().empty()) {
|
||||
storageHasId = false;
|
||||
}
|
||||
}
|
||||
@@ -302,9 +302,10 @@ std::vector<PluginContainer> PluginContainerPersistence::loadPlugins(plugin_info
|
||||
|
||||
for (uint32_t j = 0; j < functionReplaceCount; j++) {
|
||||
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, entry->targetProcess);
|
||||
curPluginInformation.addFunctionData(func);
|
||||
auto func = std::make_shared<FunctionData>((void *) entry->physicalAddr, (void *) entry->virtualAddr, entry->function_name, (function_replacement_library_type_t) entry->library,
|
||||
(void *) entry->replaceAddr,
|
||||
(void *) entry->replaceCall, entry->targetProcess);
|
||||
curPluginInformation->addFunctionData(func);
|
||||
}
|
||||
|
||||
/* load relocation data */
|
||||
@@ -323,24 +324,24 @@ std::vector<PluginContainer> PluginContainerPersistence::loadPlugins(plugin_info
|
||||
DEBUG_FUNCTION_LINE("functionEntry was nullptr, skipping relocation entry");
|
||||
continue;
|
||||
}
|
||||
ImportRPLInformation rplInfo(importEntry->importName, importEntry->isData);
|
||||
auto rplInfo = std::make_shared<ImportRPLInformation>(importEntry->importName, importEntry->isData);
|
||||
std::string functionName(functionEntry->functionName);
|
||||
RelocationData reloc(linking_entry.type, linking_entry.offset, linking_entry.addend, linking_entry.destination, functionName, rplInfo);
|
||||
curPluginInformation.addRelocationData(reloc);
|
||||
auto reloc = std::make_shared<RelocationData>(linking_entry.type, linking_entry.offset, linking_entry.addend, linking_entry.destination, functionName, rplInfo);
|
||||
curPluginInformation->addRelocationData(reloc);
|
||||
}
|
||||
|
||||
/* load function symbol data */
|
||||
for (uint32_t j = 0; j < plugin_data->info.number_function_symbol_data; j++) {
|
||||
auto symbol_data = &plugin_data->info.function_symbol_data[j];
|
||||
std::string symbol_name = symbol_data->name;
|
||||
FunctionSymbolData funSymbolData(symbol_name, (void *) symbol_data->address, symbol_data->size);
|
||||
curPluginInformation.addFunctionSymbolData(funSymbolData);
|
||||
auto funSymbolData = std::make_shared<FunctionSymbolData>(symbol_name, (void *) symbol_data->address, symbol_data->size);
|
||||
curPluginInformation->addFunctionSymbolData(funSymbolData);
|
||||
}
|
||||
|
||||
PluginContainer container;
|
||||
container.setMetaInformation(metaInformation);
|
||||
container.setPluginData(pluginData);
|
||||
container.setPluginInformation(curPluginInformation);
|
||||
auto container = std::make_shared<PluginContainer>();
|
||||
container->setMetaInformation(metaInformation);
|
||||
container->setPluginData(pluginData);
|
||||
container->setPluginInformation(curPluginInformation);
|
||||
result.push_back(container);
|
||||
}
|
||||
return result;
|
||||
|
||||
Reference in New Issue
Block a user