ей правила (mac os):
void* addr = malloc(16);
int code = mprotect(addr, 16, PROT_READ | PROT_WRITE);
code возвращает -1, а errno 0x16.
Что ему не нравится?
RTFM! EINVAL addr is not a valid pointer, or not a multiple of the system page size. скорее всего это ваш кейс.
addr не выровнен по границе страницы)
Размер страницы очень вряд ли равен 16
А должен быть кратен размеру страницы
страница точно кратна 16
такой код имеет мало смысла, т.к. как правило mprotect применяют на регион, специально перед этим выделенный с помощью mmap
POSIX says that the behavior of mprotect() is unspecified if it is applied to a region of memory that was not obtained via mmap(2).
мпротектить можно только страницы, это во-первых
а 16 не кратен странице
Обсуждают сегодня