/**************************************************************************** * Copyright (C) 2018 Maschell * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . ****************************************************************************/ #pragma once #include #include #include #include #include "PluginMetaInformation.h" #include "RelocationData.h" #include "HookData.h" #include "FunctionData.h" #include "SectionInfo.h" class PluginInformation { public: PluginInformation(const PluginInformation &other); PluginInformation() = default; virtual ~PluginInformation() = default; void addHookData(const HookData &hook_data) { hook_data_list.push_back(hook_data); } [[nodiscard]] const std::vector &getHookDataList() const { return hook_data_list; } void addFunctionData(const FunctionData &function_data) { function_data_list.push_back(function_data); } [[nodiscard]] const std::vector &getFunctionDataList() const { return function_data_list; } void addRelocationData(const RelocationData &relocation_data) { relocation_data_list.push_back(relocation_data); } [[nodiscard]] const std::vector &getRelocationDataList() const { return relocation_data_list; } void addSectionInfo(const SectionInfo §ionInfo) { section_info_list[sectionInfo.getName()] = sectionInfo; } [[nodiscard]] const std::map &getSectionInfoList() const { return section_info_list; } [[nodiscard]] std::optional getSectionInfo(const std::string §ionName) const { if (getSectionInfoList().count(sectionName) > 0) { return section_info_list.at(sectionName); } return std::nullopt; } void setTrampolinId(uint8_t _trampolinId) { this->trampolinId = _trampolinId; } [[nodiscard]] uint8_t getTrampolinId() const { return trampolinId; } private: std::vector hook_data_list; std::vector function_data_list; std::vector relocation_data_list; std::map section_info_list; uint8_t trampolinId = 0; void *allocatedTextMemoryAddress = nullptr; void *allocatedDataMemoryAddress = nullptr; friend class PluginInformationFactory; friend class PluginContainerPersistence; };