Save the address of memory allocated on the plugin heap

This commit is contained in:
Maschell
2020-05-03 12:23:50 +02:00
parent 53f454f6ed
commit c1c7594926
4 changed files with 16 additions and 1 deletions

View File

@@ -64,6 +64,8 @@ struct plugin_info_t {
uint32_t number_used_hooks; // Number of used hooks. Maximum is MAXIMUM_HOOKS_PER_PLUGIN
replacement_data_hook_t hooks[MAXIMUM_HOOKS_PER_PLUGIN]; // Replacement information for each function.
uint8_t trampolinId;
void * allocatedTextMemoryAddress = nullptr;
void * allocatedDataMemoryAddress = nullptr;
};
struct plugin_data_t {

View File

@@ -159,6 +159,9 @@ bool PluginContainerPersistence::savePlugin(plugin_information_t * pluginInforma
}
}
plugin_data->info.trampolinId = pluginInfo.getTrampolinId();
plugin_data->info.allocatedTextMemoryAddress = pluginInfo.allocatedTextMemoryAddress;
plugin_data->info.allocatedDataMemoryAddress = pluginInfo.allocatedDataMemoryAddress;
/* Copy plugin data */
auto pluginData = plugin.getPluginData();
@@ -219,6 +222,8 @@ std::vector<PluginContainer> PluginContainerPersistence::loadPlugins(plugin_info
PluginInformation pluginInformation;
pluginInformation.setTrampolinId(plugin_data->info.trampolinId);
pluginInformation.allocatedTextMemoryAddress = plugin_data->info.allocatedTextMemoryAddress;
pluginInformation.allocatedDataMemoryAddress = plugin_data->info.allocatedDataMemoryAddress;
for(uint32_t i = 0; i < MAXIMUM_PLUGIN_SECTION_LENGTH; i++) {
plugin_section_info_t * sectionInfo = &(plugin_data->info.sectionInfos[i]);

View File

@@ -81,6 +81,7 @@ public:
uint8_t getTrampolinId() const {
return trampolinId;
}
private:
std::vector<HookData> hook_data_list;
@@ -90,6 +91,9 @@ private:
uint8_t trampolinId = 0;
void* allocatedTextMemoryAddress = 0;
void* allocatedDataMemoryAddress = 0;
friend class PluginInformationFactory;
friend class PluginInformationPersistence;
friend class PluginContainerPersistence;
};

View File

@@ -197,6 +197,10 @@ std::optional<PluginInformation> PluginInformationFactory::load(const PluginData
}
}
// Save the addresses for the allocated. This way we can free it again :)
pluginInfo.allocatedDataMemoryAddress = data_data;
pluginInfo.allocatedTextMemoryAddress = text_data;
return pluginInfo;
}