Initial commit
This commit is contained in:
commit
3dd53cf457
105 changed files with 35670 additions and 0 deletions
77
vendor/dynlibutils/module.h
vendored
Normal file
77
vendor/dynlibutils/module.h
vendored
Normal file
|
|
@ -0,0 +1,77 @@
|
|||
// DynLibUtils
|
||||
// Copyright (C) 2023 komashchenko (Phoenix)
|
||||
// https://github.com/komashchenko/DynLibUtils
|
||||
|
||||
#ifndef DYNLIBUTILS_MODULE_H
|
||||
#define DYNLIBUTILS_MODULE_H
|
||||
#ifdef _WIN32
|
||||
#pragma once
|
||||
#endif
|
||||
|
||||
#include "memaddr.h"
|
||||
#include <vector>
|
||||
#include <string>
|
||||
#include <string_view>
|
||||
#include <utility>
|
||||
|
||||
namespace DynLibUtils {
|
||||
|
||||
class CModule
|
||||
{
|
||||
public:
|
||||
struct ModuleSections_t
|
||||
{
|
||||
ModuleSections_t() : m_nSectionSize(0) {}
|
||||
ModuleSections_t(const ModuleSections_t&) = default;
|
||||
ModuleSections_t& operator= (const ModuleSections_t&) = default;
|
||||
ModuleSections_t(ModuleSections_t&& other) noexcept : m_svSectionName(std::move(other.m_svSectionName)), m_pSectionBase(std::move(other.m_pSectionBase)), m_nSectionSize(std::exchange(other.m_nSectionSize, 0)) {}
|
||||
ModuleSections_t(const std::string_view svSectionName, uintptr_t pSectionBase, size_t nSectionSize) : m_svSectionName(svSectionName), m_pSectionBase(pSectionBase), m_nSectionSize(nSectionSize) {}
|
||||
|
||||
[[nodiscard]] inline bool IsSectionValid() const noexcept
|
||||
{
|
||||
return m_pSectionBase;
|
||||
}
|
||||
|
||||
std::string m_svSectionName; // Name of section.
|
||||
CMemory m_pSectionBase; // Start address of section.
|
||||
size_t m_nSectionSize; // Size of section.
|
||||
};
|
||||
|
||||
CModule() : m_pModuleHandle(nullptr) {}
|
||||
~CModule();
|
||||
CModule (const CModule&) = delete;
|
||||
CModule& operator= (const CModule&) = delete;
|
||||
CModule(CModule&& other) noexcept : m_ExecutableCode(std::move(other.m_ExecutableCode)), m_sModulePath(std::move(other.m_sModulePath)), m_pModuleHandle(std::exchange(other.m_pModuleHandle, nullptr)), m_vModuleSections(std::move(other.m_vModuleSections)) {}
|
||||
explicit CModule(const std::string_view svModuleName);
|
||||
explicit CModule(const char* pszModuleName) : CModule(std::string_view(pszModuleName)) {}
|
||||
explicit CModule(const std::string& sModuleName) : CModule(std::string_view(sModuleName)) {}
|
||||
CModule(const CMemory pModuleMemory);
|
||||
|
||||
bool InitFromName(const std::string_view svModuleName, bool bExtension = false);
|
||||
bool InitFromMemory(const CMemory pModuleMemory);
|
||||
|
||||
[[nodiscard]] static std::pair<std::vector<uint8_t>, std::string> PatternToMaskedBytes(const std::string_view svInput);
|
||||
[[nodiscard]] CMemory FindPattern(const CMemory pPattern, const std::string_view szMask, const CMemory pStartAddress = nullptr, const ModuleSections_t* pModuleSection = nullptr) const;
|
||||
[[nodiscard]] CMemory FindPattern(const std::string_view svPattern, const CMemory pStartAddress = nullptr, const ModuleSections_t* pModuleSection = nullptr) const;
|
||||
|
||||
[[nodiscard]] CMemory GetVirtualTableByName(const std::string_view svTableName, bool bDecorated = false) const;
|
||||
[[nodiscard]] CMemory GetFunctionByName(const std::string_view svFunctionName) const noexcept;
|
||||
|
||||
[[nodiscard]] ModuleSections_t GetSectionByName(const std::string_view svSectionName) const;
|
||||
[[nodiscard]] void* GetModuleHandle() const noexcept;
|
||||
[[nodiscard]] CMemory GetModuleBase() const noexcept;
|
||||
[[nodiscard]] std::string_view GetModulePath() const;
|
||||
[[nodiscard]] std::string_view GetModuleName() const;
|
||||
|
||||
private:
|
||||
bool Init(const std::string_view svModelePath);
|
||||
|
||||
ModuleSections_t m_ExecutableCode;
|
||||
std::string m_sModulePath;
|
||||
void* m_pModuleHandle;
|
||||
std::vector<ModuleSections_t> m_vModuleSections;
|
||||
};
|
||||
|
||||
} // namespace DynLibUtils
|
||||
|
||||
#endif // DYNLIBUTILS_MODULE_H
|
||||
Loading…
Add table
Add a link
Reference in a new issue