About the partial clone problem: `clone_area` and then `munmap` works properly. ```cpp #include #include #include #include int main() { void* originalAddr = NULL; int id = create_area("original area", &originalAddr, B_ANY_ADDRESS, B_PAGE_SIZE * 3, B_NO_LOCK, B_READ_AREA | B_WRITE_AREA); void* clonedAddr = NULL; int clonedId = clone_area("cloned area", &clonedAddr, B_ANY_ADDRESS, B_READ_AREA | B_EXECUTE_AREA, id); munmap(clonedAddr, B_PAGE_SIZE); munmap((uint8_t*)clonedAddr + B_PAGE_SIZE * 2, B_PAGE_SIZE); uint8_t asm_bytes[] { // mov rax, 0x0B5E 0x48, 0xc7, 0xc0, 0x5E, 0x0B, 0x00, 0x00, // ret 0xc3 }; memcpy((uint8_t*)originalAddr + B_PAGE_SIZE, asm_bytes, sizeof(asm_bytes)); int (*func)() = (int (*)())((uint8_t*)clonedAddr + B_PAGE_SIZE); std::cout << func() << std::endl; return 0; } ```