摘要: 最近QA测试的时候发现在导入一个数据文件的时候会出现access violation。导入其他数据文件则没有问题。初步判断是heap corruption。 由于QA使用的是release baseline,于是本地换成了debug baseline,这样对于debug会有帮助。 在debug baseline上导入同样的数据文件,同样会出现问题。只不过由于是debug baseline,它会报出下面的消息: Heap missing last entry in committed range near 0x2fba26b8 (你必须用windbg attach上进程,然后上述信息才会显示) 阅读全文
posted @ 2011-05-27 10:28 relianceslee 阅读(731) 评论(0) 推荐(0) 编辑
摘要: When you compile a debug build of your program with Visual Studio and run it in debugger, you can see that the memory allocated or deallocated has funny values, such as 0xCDCDCDCD or 0xDDDDDDDD. This is the result of the work Microsoft has put in to detect memory corruption and leaks in the Win32 platform. In this article, I will explain how memory allocation/deallocation is done via new/delete or malloc/free. 阅读全文
posted @ 2011-05-24 17:20 relianceslee 阅读(527) 评论(0) 推荐(0) 编辑
摘要: WinFoms中如果想添加control的话只支持winform control。但是,我们有很多老控件,所以,WinForm提供了一种新方法,可以支持我们将ActiveX用在WinForm中,而且就和用winform一样。 这里我们将在一个Form中添加一个Media Player。 阅读全文
posted @ 2011-05-07 18:01 relianceslee 阅读(1418) 评论(0) 推荐(1) 编辑
摘要: 前一遍说到了为什么访问内存会越界,以及我们是如何找到根本原因的。 在知道为什么有越界访问之后,我们下一个问题是:为什么第一次调用mapviewoffile会失败?为什么第二次调用mapviewoffile会成功了? 查阅了msdn一下。如果在调用MapViewOfFile()的时候,dwNumberOfBytesToMap如果大于文件的size,那么该call就会失败,并且error code是access denied。 阅读全文
posted @ 2011-04-25 13:58 relianceslee 阅读(5564) 评论(0) 推荐(0) 编辑
摘要: 最近在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,然后 阅读全文
posted @ 2011-04-25 12:05 relianceslee 阅读(5148) 评论(0) 推荐(0) 编辑
摘要: We have a C# client and a Local COM server hosting a VoIP stack. We use COM interop. for API and events to the COM server. Today after some changes, when we started to load testing the system a nasty crash happened. From initial observation it's look like some kind of Heap Corruption(may be leaked from stack boundary and stuff like that). 阅读全文
posted @ 2011-03-01 11:00 relianceslee 阅读(1364) 评论(0) 推荐(0) 编辑
摘要: ZZ from http://myang1969.wordpress.com/2007/11/04/heap-overrununderrun/Alloc/FreePage ModeFill Pattern (4)PageHeap metadata (24)Fill Pattern (4)Accessible areaSuffix PatternAllocNormalABCDAAAADCBAAAAAE0…A0A0A0A0…FreeNormalABCDAAA9DCBAAAA9F0…A0A0A0A0…AllocFullABCDBBBBDCBAB 阅读全文
posted @ 2011-02-18 17:17 relianceslee 阅读(546) 评论(0) 推荐(0) 编辑
摘要: 通常我们在debug的时候一般都是启动程序后在visual studio里点击Attach Process。但是有些时候我们需要在程序启动的时候就开始debug,所以这个时候我们需要做一些设置,让visual studio从一开始就attach到我们的程序上。To setup an application to launch the debugger automatically 打开注册表.打开 HKEY_LOCAL_MACHINE .找到 HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\currentversion\image file ex 阅读全文
posted @ 2011-01-30 10:00 relianceslee 阅读(329) 评论(0) 推荐(0) 编辑
摘要: 我们有时候得某块内存地址,但不知道他是谁申请的。 通过AppVerifier,我们可以得到stack trace。 阅读全文
posted @ 2011-01-28 16:23 relianceslee 阅读(464) 评论(0) 推荐(0) 编辑
摘要: WinDBG提供了!heap命令帮助我们查找heap,同时我们也可以通过dt和MS SYMBOL来了解memory layout。 阅读全文
posted @ 2011-01-28 15:43 relianceslee 阅读(1218) 评论(0) 推荐(0) 编辑