【发布时间】:2011-02-11 22:39:07
【问题描述】:
我正在构建一个程序,它使用 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 等)?
【问题讨论】:
标签: signals handler segmentation-fault mprotect