Je suis en train de construire un programme qui utilise mprotect() pour empêcher l'accès à un bloc de mémoire. Quand la mémoire est demandée, un SIGSEGV est lancé que j'écoute en utilisant un appel de signal().C SIGSEGV Handler & Mprotect
Une fois que le SIGSEGV a été détecté, j'ai besoin d'accéder d'une manière ou d'une autre au pointeur de la mémoire demandée (qui a jeté le défaut) et à la taille du segment demandé. Est-ce possible?
void fifoSigHandler(){
// Needs to only remove protection from requested block of virtual memory
mprotect(fifoVm,(size_t)fifoVm_size,PROT_WRITE);
printf("Caught Seg Fault");
}
void fifo_init(void* vm, int vm_size, int n_frames, int page_size)
{
fifoVm = vm;
fifoVm_size = vm_size;
fifoFrames = n_frames;
fifoPageSize = page_size;
mprotect(fifoVm,(size_t)fifoVm_size,PROT_NONE);
signal(SIGSEGV, fifoSigHandler);
}
De plus, est-il un moyen de déterminer le niveau de mprotect() un bloc de mémoire est actuellement affecté (PROT_NONE, PROT_READ, etc ..)?
Comment référencer cette information utile? Plus précisément, le pointeur et la taille de la mémoire demandée – pws5068