Files
hiload/src/memory.h

46 lines
1.1 KiB
C

#ifndef MEMORY_H_
#define MEMORY_H_
#include "array/array.h"
#include "types.h"
#include <assert.h>
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_