ReXGlue SDK
Loading...
Searching...
No Matches
rex::kernel::VirtualHeap Class Reference
Inheritance diagram for rex::kernel::VirtualHeap:
[legend]

Public Member Functions

void Initialize (kernel::GuestAddressSpace *memory, u8 *membase, HeapType heap_type, u32 heap_base, u32 heap_size, u32 page_size)
Public Member Functions inherited from rex::kernel::BaseHeap
virtual ~BaseHeap ()
u32 GetHeapBase () const
u32 GetHeapSize () const
u32 GetPageSize () const
HeapType GetHeapType () const
u32 GetHostAddressOffset () const
template<typename T = u8*>
T TranslateRelative (size_t relative_address) const
virtual void Dispose ()
u32 GetTotalPageCount () const
u32 GetUnreservedPageCount () const
u32 GetReservedPageCount () const
u32 GetCommittedPages () const
void PlotProfile () const
virtual bool Alloc (u32 size, u32 alignment, u32 allocation_type, u32 protect, bool top_down, u32 *out_address)
virtual bool AllocFixed (u32 base_address, u32 size, u32 alignment, u32 allocation_type, u32 protect)
virtual bool AllocRange (u32 low_address, u32 high_address, u32 size, u32 alignment, u32 allocation_type, u32 protect, bool top_down, u32 *out_address)
virtual bool AllocSystemHeap (u32 size, u32 alignment, u32 allocation_type, u32 protect, bool top_down, u32 *out_address)
virtual bool Decommit (u32 address, u32 size)
virtual bool Release (u32 address, u32 *out_region_size=nullptr)
bool ReleaseRange (u32 address, u32 size, u32 *out_address, u32 *out_size)
virtual bool Protect (u32 address, u32 size, u32 protect, u32 *old_protect=nullptr)
bool QueryRegionInfo (u32 base_address, HeapAllocation *out_info)
bool QuerySize (u32 address, u32 *out_size)
bool QueryProtect (u32 address, u32 *out_protect)
rex::memory::PageAccess QueryRangeAccess (u32 low_address, u32 high_address)
rex::memory::PageAccess GetHostPageAccess (u32 host_page_number) const
bool ReapplyHostPageAccess (void *host_address, bool is_write)

Additional Inherited Members

Protected Member Functions inherited from rex::kernel::BaseHeap
rex::memory::PageAccess GetHostPageGuestAccess (u32 host_page_number) const
bool SyncHostPageAccess (u32 start_page_number, u32 end_page_number)
virtual std::unique_lock< rex::platform::RankedMutex > AcquireHostPageReconcileLock () const
u32 GetSystemRangeBase () const
bool AllocFixedLocked (u32 base_address, u32 size, u32 alignment, u32 allocation_type, u32 protect)
bool AllocRangeLocked (u32 low_address, u32 high_address, u32 size, u32 alignment, u32 allocation_type, u32 protect, bool top_down, u32 *out_address)
bool DecommitLocked (u32 address, u32 size)
bool ReleaseLocked (u32 address, u32 *out_region_size)
bool ReleaseRangeLocked (u32 address, u32 size, u32 *out_address, u32 *out_size)
bool ProtectLocked (u32 address, u32 size, u32 protect, u32 *old_protect)
bool CheckProtectRangeLocked (u32 address, u32 size, u32 *out_start_page, u32 *out_end_page)
virtual bool IsHostPageWriteWatched (u32 host_page_number) const
void OnPageCommitted (u32 page_number)
void OnPageDecommitted (u32 page_number)
void Initialize (kernel::GuestAddressSpace *memory, u8 *membase, HeapType heap_type, u32 heap_base, u32 heap_size, u32 page_size, u32 host_address_offset=0)
Protected Attributes inherited from rex::kernel::BaseHeap
kernel::GuestAddressSpace * memory_
u8 * membase_
HeapType heap_type_
u32 heap_base_
u32 heap_size_
u32 page_size_
u32 page_size_shift_ = 0
u32 host_address_offset_
u32 unreserved_page_count_ = 0
std::atomic< u32 > committed_pages_ {0}
const char * profile_pool_ = nullptr
const char * profile_plot_ = nullptr
std::recursive_mutex heap_mutex_
std::vector< PageEntry > page_table_

Member Function Documentation

◆ Initialize()

void rex::kernel::VirtualHeap::Initialize ( kernel::GuestAddressSpace * memory,
u8 * membase,
HeapType heap_type,
u32 heap_base,
u32 heap_size,
u32 page_size )

Initializes the heap properties and allocates the page table.

Parameters
heap_baseThe heap offset relative to membase.

The documentation for this class was generated from the following file: