#include #include #include #include #include #include #include #include "library.h" #include // internal structs #define GRP_SIZE 32 typedef struct group { struct meta *meta; unsigned char active_idx:5; char pad[GRP_SIZE - sizeof(struct meta *) - 1]; unsigned char storage[]; } group; typedef struct meta { struct meta *prev, *next; struct group *mem; volatile int avail_mask, freed_mask; size_t last_idx:5; size_t freeable:1; size_t sizeclass:6; size_t maplen:8*sizeof(size_t)-12; } meta; typedef struct meta_area { uint64_t check; struct meta_area *next; int nslots; struct meta slots[]; } meta_area; // https://git.morello-project.org/morello/musl-libc/-/blob/morello/master/src/malloc/mallocng/malloc.c int test(int** oldArray){ void** metaMap = mmap(NULL, 0x4000, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, 0, 0); void** groupMap = mmap(NULL, 0x1000, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, 0, 0); printf("metadata page: %p\n", metaMap); printf("group: %p\n", groupMap); group* newGroup = (group*) groupMap; meta* newMeta = (meta*) metaMap; newGroup->meta = newMeta; newMeta->prev = newMeta; newMeta->next = newMeta; newMeta->group = newGroup; printf("%p:%p\n", newGroup, newGroup->meta); }