Quiero asignar una memoria con permisos de ejecución. Así que uso mprotect para cambiar los permisos. Para obtener una memoria alineada con la página, uso una función valloc
.¿Cómo asignar una memoria con permisos de ejecución?
void * temp = (void *) valloc(x);
y luego
if(mprotect(temp, BLOCK_SIZE, (PROT_READ | PROT_WRITE |PROT_EXEC))) {
exit(-1);
}
Ahora quiero añadir más memoria a este bloque asignado. Por lo tanto, uso una función realloc
.
void * new_temp = (void *) realloc(temp, 1024);
¿Esta asignación redirigirá automáticamente los permisos de la memoria asignada a los que había configurado antes? En caso de que realloc
mueva todo el bloque a una ubicación diferente, ¿cuáles son los permisos de la memoria asignada anteriormente y la memoria recientemente asignada?
Se debe usar mprotect
nuevamente para obtener la memoria de permisos de ejecución. Y hay una API a realloc
en el límite de tamaño de página como valloc
. ?
Debe etiquetar esto con el sistema operativo apropiado, ya que esto es más un problema de sistema operativo que de idioma. –
valloc() es una función heredada de BSD eliminada en el SUSv3. Presume algunos sistemas operativos POSIX como Linux o BSD. – Dummy00001
@David: En realidad, esto no es compatible con Windoze y Linux (no existen otros sistemas operativos), y la API solo varía donde POSIX no se ha estandarizado. –