Files
l4d2-internal-base2/l4d2/utilities/module_info/module_info.h
2022-10-26 17:08:42 +08:00

54 lines
1.3 KiB
C++

#pragma once
namespace Hikari
{
struct ModuleInfo_t
{
struct Segment_t
{
std::uintptr_t address;
std::uint8_t* data;
std::size_t size;
const char* name;
};
ModuleInfo_t();
/**
* \brief Getting module info (base_address, size, readable & executable segments) by name
* \param module_name The module's name
*/
explicit ModuleInfo_t( const std::string& module_name );
#ifdef WINDOWS
/**
* \brief Getting module info (base_address, size, readable & executable segments) by handle
* \param handle The module handle
*/
explicit ModuleInfo_t( HMODULE handle );
#endif
~ModuleInfo_t();
private:
std::string _name;
std::vector<Segment_t> _segments;
std::uintptr_t _base_address;
std::size_t _size;
#ifdef WINDOWS
HMODULE _handle;
#endif
void GetModuleInfo( const std::string& module_name );
#ifdef WINDOWS
void GetModuleInfo( HMODULE handle );
#endif
public:
std::string Name();
std::vector<Segment_t>& Segments();
std::uintptr_t BaseAddress() const;
std::size_t Size() const;
void* Handle() const;
FARPROC GetProc( std::string_view proc_name );
};
}