#ifndef MEMORY_H_ #define MEMORY_H_ #include "array/array.h" #include "types.h" #include typedef enum { HI_MEMORY_READ = 1 << 0, HI_MEMORY_WRITE = 1 << 1, HI_MEMORY_EXECUTE = 1 << 2, HI_MEMORY_SHARED = 1 << 3, HI_MEMORY_PRIVATE = 1 << 4 } MemoryPermissions; typedef struct { uptr region_start; uptr region_end; } MemoryRegionSpan; typedef struct { uptr region_start; uptr region_end; ptrdiff offset; u64 inode; const char *pathname; u32 permission; // enum MemoryPermissions } MemoryRegion; sc_array_def(MemoryRegion, memreg); /* A pointer that can be used to place the memory regions into. Clears regions * before use, but uses the same buffer. */ HiloadResult read_memory_maps_self(struct sc_array_memreg *regions); /* Return index the pointer is found in */ HiloadResult memory_find_pointer(uptr ptr, struct sc_array_memreg *const regions, size_t *index); MemoryRegionSpan memory_get_module_span(const struct sc_array_memreg *const regions, const char module_name[static 1]); #endif // MEMORY_H_