我正在构建一个程序,它使用 mprotect() 来限制访问一块内存。当请求内存时,会抛出一个 SIGSEGV,我使用 signal() 调用来监听它。
一旦检测到 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 等)?