2010-03-05 59 views
0

如果内存访问生成页面错误,在Windows/Linux或任何其他操作系统中是否可以在指令级识别?我想象大约看起来像这样的代码:在Windows/Linux平台上监视内存页面

Buffer *buffer = new Buffer(); 

    ...Do something with the buffer...    
    if(thisProcess.generatedPageFault) { 
     ...Do something... 
    } 

    ...Do something else with the buffer...    
    if(thisProcess.generatedPageFault) { 
     ...Do something... 
    } 

回答

0

因此英特尔documentation为x86处理器 - 一个页面故障中断14在低级别的内核将有一个中断处理程序中设置来捕捉该页面错误。发生这种情况时,内核的中断处理程序会相应地处理这种情况。

现在,由于这是在螺母和螺栓级别,并居住在0号环形码,我不认为你可以实际监控...你可以通过创建一个驱动程序来简单地观察页面故障(同样,依赖于内核占用的操作系统权限和内部数据结构),并将信息传回用户地空间......我怀疑这是否容易暴露...

希望这帮助, 最好的问候, 汤姆。

+0

嘿。感谢您的信息。是的,我完全同意你需要一个中断服务程序,并且必须将它挂接到适当的中断号。但是,在操作系统上可以做到这一点吗?你提出编写驱动程序的建议是非常合理的,但是你能否指点我一些能够帮助我做到的资源? – 2010-03-05 22:19:38

1

对于linux最接近的东西是读/ proc/self/stat并解析出 没有。页面错误之前,你的来电之后 - 在这里描述的格式:http://linux.die.net/man/5/proc

请记住,读/解析该文件本身可能导致页面错误 - 至少应1.时间,你这样做,如果你分配内存的读它(如致电fopen

+0

嘿。关于第二个问题的伟大观点。你知道一个智能的方法来防止阅读/解析文件的页面错误被排除吗? – 2010-03-08 00:57:18

+0

如果你只是使用一个静态缓冲区来读入,并使用open/read(而不是fopen/fread),你应该相当确定除了可能的1以外不应该有任何页面错误。 – nos 2010-03-08 08:18:38