У меня есть следующий код, где я пытаюсь что-то записать в стек.Я пишу в нижней части стека, который приложение до сих пор не коснулось (обратите внимание, что стек растет вниз и stackaddr здесь указывает на дно).
Однако я получаю ошибку сегментации даже после выполнения mprotect , чтобы дать разрешения на запись и чтение для этой области памяти.Я получаю ошибку сегментации, даже если я использую флаг компиляции -fno-stack-protector .Что здесь происходит?
pthread_attr_t attr;
void * stackaddr;
int * plocal_var;
size_t stacksize;
pthread_getattr_np(pthread_self(), &attr);
pthread_attr_getstack( &attr, &stackaddr, &stacksize );
printf( "stackaddr = %p, stacksize = %d\n", stackaddr, stacksize );
plocal_var = (int*)stackaddr;
mprotect((void*)plocal_var, 4096, PROT_READ | PROT_WRITE);
*plocal_var = 4;
printf( "local_var = %d!\n", *plocal_var );