摘要:
前一遍说到了为什么访问内存会越界,以及我们是如何找到根本原因的。
在知道为什么有越界访问之后,我们下一个问题是:为什么第一次调用mapviewoffile会失败?为什么第二次调用mapviewoffile会成功了?
查阅了msdn一下。如果在调用MapViewOfFile()的时候,dwNumberOfBytesToMap如果大于文件的size,那么该call就会失败,并且error code是access denied。 阅读全文
摘要:
最近在fix bug的时候,遇到一个由于MapViewOfFile引起的问题。在此把分析的思路记下来。
先介绍一下背景。
项目里面有一个component叫做Message。功能分为两方面:message writer和message reader。项目有多个UI进程。需要支持每个进程写消息,同时也需要在每个进程里面有个mini message viewer显示消息。另外,在一个叫做console manager的进程里有一个Message Viewer。
现在这个message writer被实现为一个singleton COM EXE。如果哪个进程需要写消息,可以创建instance,然后通过Interface来写消息。message reader是一个普通的COM object。message viewer会create一个instance,然后定期来读消息,显示在UI上。
从上面分析我们可以看出,message是跨进程share的。该项目是通过MMF来达到该目的的。message writer会create一块memory mapping file,然后 阅读全文