Desidero allocare una memoria con autorizzazioni di esecuzione. Quindi uso mprotect per modificare le autorizzazioni. Per ottenere una memoria allineata alle pagine, utilizzo una funzione valloc
.Come allocare una memoria con autorizzazioni di esecuzione?
void * temp = (void *) valloc(x);
e poi
if(mprotect(temp, BLOCK_SIZE, (PROT_READ | PROT_WRITE |PROT_EXEC))) {
exit(-1);
}
Ora voglio aggiungere più memoria a questo blocco allocato. Quindi io uso una funzione realloc
.
void * new_temp = (void *) realloc(temp, 1024);
Sarà questo RIALLOCAZIONE cambiare automaticamente le autorizzazioni della memoria allocata a quelle che avevo impostate in precedenza ?? Nel caso in cui realloc
sposta l'intero blocco in una posizione diversa, quali sono i permessi della memoria allocata in precedenza e la memoria appena allocata?
Dovrebbe essere utilizzato nuovamente mprotect
per ottenere la memoria delle autorizzazioni di esecuzione. E c'è un'API a realloc
sul limite delle dimensioni della pagina come valloc
. ?
Si dovrebbe contrassegnare questo con il sistema operativo appropriato, in quanto si tratta più di un sistema operativo che di una domanda di lingua. –
valloc() è una funzione legacy BSD rimossa in SUSv3. Presume alcuni sistemi POSIX come Linux o BSD. – Dummy00001
@David: Non proprio, questa roba è supportata da Windoze e Linux (altri sistemi operativi non esistono) e l'API varia solo dove POSIX non è standardizzato. –