2020-04-28 14:43:07 +02:00
|
|
|
#pragma once
|
2020-05-17 19:05:51 +02:00
|
|
|
|
2020-06-06 17:02:31 +02:00
|
|
|
#include <wums.h>
|
2020-04-28 14:43:07 +02:00
|
|
|
#include "utils/logger.h"
|
|
|
|
#include <string>
|
|
|
|
#include <vector>
|
|
|
|
#include "RelocationData.h"
|
|
|
|
|
|
|
|
class DynamicLinkingHelper {
|
|
|
|
public:
|
|
|
|
/**
|
|
|
|
Gets the function entry for a given function name. If the function name is not present in the list, it will be added.
|
|
|
|
|
|
|
|
\param functionName Name of the function
|
|
|
|
\return Returns a pointer to the entry which contains the functionName. Null on error or if the list full.
|
|
|
|
**/
|
2020-05-17 19:05:51 +02:00
|
|
|
static dyn_linking_function_t *getOrAddFunctionEntryByName(dyn_linking_relocation_data_t *data, const char *functionName);
|
2020-04-28 14:43:07 +02:00
|
|
|
|
|
|
|
/**
|
|
|
|
Gets the function import entry for a given function name. If the import is not present in the list, it will be added.
|
|
|
|
This will return entries for _function_ imports.
|
|
|
|
|
|
|
|
\param importName Name of the function
|
|
|
|
\return Returns a pointer to the function import entry which contains the importName. Null on error or if the list full.
|
|
|
|
**/
|
2020-05-17 19:05:51 +02:00
|
|
|
static dyn_linking_import_t *getOrAddFunctionImportByName(dyn_linking_relocation_data_t *data, const char *importName);
|
2020-04-28 14:43:07 +02:00
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
Gets the data import entry for a given data name. If the import is not present in the list, it will be added.
|
|
|
|
This will return entries for _data_ imports.
|
|
|
|
|
|
|
|
\param importName Name of the data
|
|
|
|
\return Returns a pointer to the data import entry which contains the importName. Null on error or if the list full.
|
|
|
|
**/
|
2020-05-17 19:05:51 +02:00
|
|
|
static dyn_linking_import_t *getOrAddDataImportByName(dyn_linking_relocation_data_t *data, const char *importName);
|
2020-04-28 14:43:07 +02:00
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
Gets the import entry for a given data name and type. If the import is not present in the list, it will be added.
|
|
|
|
This will return entries for _data_ and _function_ imports, depending on the isData parameter.
|
|
|
|
|
|
|
|
\param importName Name of the data
|
|
|
|
\param isData Set this to true to return a data import
|
|
|
|
|
|
|
|
\return Returns a pointer to the data import entry which contains the importName. Null on error or if the list full.
|
|
|
|
**/
|
2020-05-17 19:05:51 +02:00
|
|
|
static dyn_linking_import_t *getOrAddImport(dyn_linking_relocation_data_t *data, const char *importName, bool isData);
|
|
|
|
|
2021-09-18 11:55:01 +02:00
|
|
|
static bool addRelocationEntry(dyn_linking_relocation_data_t *linking_data, dyn_linking_relocation_entry_t *linking_entries, uint32_t linking_entry_length, const RelocationData &relocationData);
|
2020-04-28 14:43:07 +02:00
|
|
|
|
2021-09-23 18:38:29 +02:00
|
|
|
static bool addReloationEntry(dyn_linking_relocation_data_t *linking_data, dyn_linking_relocation_entry_t *linking_entries, uint32_t linking_entry_length, char type, size_t offset, int32_t addend,
|
|
|
|
void *destination, std::string name,
|
2020-05-17 19:05:51 +02:00
|
|
|
const ImportRPLInformation &rplInfo);
|
2020-04-28 14:43:07 +02:00
|
|
|
|
2020-05-17 19:05:51 +02:00
|
|
|
static bool
|
2021-09-23 18:38:29 +02:00
|
|
|
addRelocationEntry(dyn_linking_relocation_entry_t *linking_entries, uint32_t linking_entry_length, char type, size_t offset, int32_t addend, void *destination,
|
|
|
|
dyn_linking_function_t *functionName, dyn_linking_import_t *importInfo);
|
2020-04-28 14:43:07 +02:00
|
|
|
|
|
|
|
private:
|
2021-09-18 11:55:01 +02:00
|
|
|
DynamicLinkingHelper() = default;
|
2020-04-28 14:43:07 +02:00
|
|
|
|
2021-09-18 11:55:01 +02:00
|
|
|
~DynamicLinkingHelper() = default;
|
2020-04-28 14:43:07 +02:00
|
|
|
};
|