我正在構建一個使用mprotect()來限制內存訪問的程序。當請求存儲器時,將使用signal()調用偵聽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 2010-04-24 19:15:32