C SIGSEGV Handler & Mprotect

Ich erstelle ein Programm, das mprotect () verwendet, um den Zugriff auf einen Speicherblock zu beschränken. Wenn der Speicher angefordert wird, wird ein SIGSEGV ausgelöst, auf den ich mit einem signal () -Aufruf horche.

Nachdem SIGSEGV erkannt wurde, muss ich irgendwie auf den Zeiger auf den Speicher zugreifen, der angefordert wurde (der den Fehler verursacht hat) und auf die Größe des angeforderten Segments. Ist das möglich

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);
}

Gibt es zusätzlich eine Möglichkeit, die Ebene von mprotect () zu bestimmen, der derzeit ein Speicherblock zugewiesen ist (PROT_NONE, PROT_READ usw.)?

Antworten auf die Frage(6)

Ihre Antwort auf die Frage