Я создаю программу, которая использует mprotect(), чтобы ограничить доступ к блоку памяти. Когда запрашивается память, вызывается SIGSEGV, который я прослушиваю для вызова сигнала().C SIGSEGV Handler & Mprotect
После обнаружения SIGSEGV мне нужно каким-то образом получить доступ к указателю на запрошенную память (что вызвало ошибку) и размер запрошенного сегмента. Это возможно?
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);
}
Кроме того, есть ли способ, чтобы определить уровень mprotect() блок памяти в настоящее время назначен (PROT_NONE, PROT_READ, и т.д ..)?
Как мы ссылаемся на эту полезную информацию? В частности, указатель и размер запрашиваемой памяти – pws5068