#include "memmap.h" struct EfiMemoryDescription *StoredMemoryMap; u32 StoredMemoryMapEntryCount = 0; u32 StoredMemoryMapEntrySize = 0; void EfiLoadStoredMemoryMap( struct EfiMemoryDescription* MemoryMap, u32 MemoryMapEntryCount, u32 MemoryMapEntrySize ) { StoredMemoryMap = MemoryMap; StoredMemoryMapEntryCount = MemoryMapEntryCount; StoredMemoryMapEntrySize = MemoryMapEntrySize; } /** * Translate a pointer using what we can recover from the UEFI memory map, returns 0 if not found */ void* EfiTranslatePointer(void* FirmwarePointer) { void* CurrentEntry = (void*)StoredMemoryMap; // Scan the memory map for where our thing is for (int i = 0; i < StoredMemoryMapEntryCount; i++) { struct EfiMemoryDescription* Entry = (struct EfiMemoryDescription*)CurrentEntry; if (FirmwarePointer >= Entry->VirtualStart && FirmwarePointer < Entry->VirtualStart + 0x1000 * Entry->NumberOfPages) { return FirmwarePointer - Entry->VirtualStart + Entry->PhysicalStart; } CurrentEntry += StoredMemoryMapEntrySize; } // Well, we tried return 0; }