- return (void *)syscall(__NR_shmat, __shmid, __shmaddr, __shmflg);
+ size_t *ptr, size = ioctl(__shmid, ASHMEM_GET_SIZE, NULL);
+ ptr = mmap(NULL, size + sizeof(size_t), PROT_READ | PROT_WRITE, MAP_SHARED, __shmid, 0);
+ *ptr = size; //save size at beginning of buffer, for use with munmap
+ return &ptr[1];