<?xml version="1.0" encoding="UTF-8"?><!-- generator="wordpress/2.3.3" -->
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	>
<channel>
	<title>Comments on: Crash Dump Analysis Patterns (Part 23a)</title>
	<link>https://www.dumpanalysis.org/blog/index.php/2007/08/19/crash-dump-analysis-patterns-part-23a/</link>
	<description>Structural and Behavioral Patterns for Software Diagnostics, Forensics and Prognostics</description>
	<pubDate>Tue, 19 May 2026 01:54:35 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.3.3</generator>
		<item>
		<title>By: Dmitry Vostokov</title>
		<link>https://www.dumpanalysis.org/blog/index.php/2007/08/19/crash-dump-analysis-patterns-part-23a/#comment-741738</link>
		<dc:creator>Dmitry Vostokov</dc:creator>
		<pubDate>Sun, 04 Jun 2017 14:10:18 +0000</pubDate>
		<guid>https://www.dumpanalysis.org/blog/index.php/2007/08/19/crash-dump-analysis-patterns-part-23a/#comment-741738</guid>
		<description>0:000&gt; !heap -s -v

Details:

Heap address:  00cb0000
Error address: 103f4550
Error type: HEAP_FAILURE_BLOCK_NOT_BUSY
Details:    The caller performed an operation (such as a free
            or a size check) that is illegal on a free block.
Follow-up:  Check the error's stack trace to find the culprit.

Stack trace:
                772ec3bd: ntdll!RtlpFreeHeapInternal+0x000000db
                772ac6dc: ntdll!RtlFreeHeap+0x0000002c
                747a8eab: combase!CRetailMalloc_Free+0x0000001b
                6a3537b1: hlink!CMalloc::Free+0x00000031
                6a3536b3: hlink!HLNK_Unk::Release+0x000000f3
                2e5933a8: PPCORE!PPMain+0x00406423
                2e2847ba: PPCORE!PPMain+0x000f7835
                2e26a9ec: PPCORE!PPMain+0x000dda67
                2e26a8dd: PPCORE!PPMain+0x000dd958
                2e26a76e: PPCORE!PPMain+0x000dd7e9
                2e26a6e7: PPCORE!PPMain+0x000dd762
                2e26a68c: PPCORE!PPMain+0x000dd707
                2e26a616: PPCORE!PPMain+0x000dd691
                2e26a5ec: PPCORE!PPMain+0x000dd667
                54a6647e: OART!Ordinal834+0x00000057
                54ade32c: OART!Ordinal971+0x00000094

0:000&gt; !heap -x 103f4550
Entry     User      Heap      Segment       Size  PrevSize  Unused    Flags
-----------------------------------------------------------------------------
103f4550  103f4558  00cb0000  1010ffa8        e0      -            0  LFH;free</description>
		<content:encoded><![CDATA[<p>0:000> !heap -s -v</p>
<p>Details:</p>
<p>Heap address:  00cb0000<br />
Error address: 103f4550<br />
Error type: HEAP_FAILURE_BLOCK_NOT_BUSY<br />
Details:    The caller performed an operation (such as a free<br />
            or a size check) that is illegal on a free block.<br />
Follow-up:  Check the error&#8217;s stack trace to find the culprit.</p>
<p>Stack trace:<br />
                772ec3bd: ntdll!RtlpFreeHeapInternal+0&#215;000000db<br />
                772ac6dc: ntdll!RtlFreeHeap+0&#215;0000002c<br />
                747a8eab: combase!CRetailMalloc_Free+0&#215;0000001b<br />
                6a3537b1: hlink!CMalloc::Free+0&#215;00000031<br />
                6a3536b3: hlink!HLNK_Unk::Release+0&#215;000000f3<br />
                2e5933a8: PPCORE!PPMain+0&#215;00406423<br />
                2e2847ba: PPCORE!PPMain+0&#215;000f7835<br />
                2e26a9ec: PPCORE!PPMain+0&#215;000dda67<br />
                2e26a8dd: PPCORE!PPMain+0&#215;000dd958<br />
                2e26a76e: PPCORE!PPMain+0&#215;000dd7e9<br />
                2e26a6e7: PPCORE!PPMain+0&#215;000dd762<br />
                2e26a68c: PPCORE!PPMain+0&#215;000dd707<br />
                2e26a616: PPCORE!PPMain+0&#215;000dd691<br />
                2e26a5ec: PPCORE!PPMain+0&#215;000dd667<br />
                54a6647e: OART!Ordinal834+0&#215;00000057<br />
                54ade32c: OART!Ordinal971+0&#215;00000094</p>
<p>0:000> !heap -x 103f4550<br />
Entry     User      Heap      Segment       Size  PrevSize  Unused    Flags<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
103f4550  103f4558  00cb0000  1010ffa8        e0      -            0  LFH;free</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Dmitry Vostokov</title>
		<link>https://www.dumpanalysis.org/blog/index.php/2007/08/19/crash-dump-analysis-patterns-part-23a/#comment-741661</link>
		<dc:creator>Dmitry Vostokov</dc:creator>
		<pubDate>Thu, 26 Feb 2015 17:50:25 +0000</pubDate>
		<guid>https://www.dumpanalysis.org/blog/index.php/2007/08/19/crash-dump-analysis-patterns-part-23a/#comment-741661</guid>
		<description>An example of Double Free detected in Windows 7:

0:048&gt; k
ChildEBP RetAddr  
206dee98 777f8567 ntdll!ZwWaitForSingleObject+0x15
206def1c 777f8695 ntdll!RtlReportExceptionEx+0x14b
206def74 7781e6e6 ntdll!RtlReportException+0x86
206def88 7781e763 ntdll!RtlpTerminateFailureFilter+0x14
206def94 777c73dc ntdll!RtlReportCriticalFailure+0x67
206defa8 777c7281 ntdll!_EH4_CallFilterFunc+0x12
206defd0 777ab499 ntdll!_except_handler4+0x8e
206deff4 777ab46b ntdll!ExecuteHandler2+0x26
206df018 777ab40e ntdll!ExecuteHandler+0x24
206df0a4 77760133 ntdll!RtlDispatchException+0x127
206df0a4 7781e753 ntdll!KiUserExceptionDispatcher+0xf
206df5e8 7781f659 ntdll!RtlReportCriticalFailure+0x57
206df5f8 7781f739 ntdll!RtlpReportHeapFailure+0x21
206df62c 777ce045 ntdll!RtlpLogHeapFailure+0xa1
206df65c 76aa6e6a ntdll!RtlFreeHeap+0x64
206df670 58110076 ole32!CRetailMalloc_Free+0x1c [d:\w7rtm\com\ole32\com\class\memapi.cxx @ 687]
WARNING: Stack unwind information not available. Following frames may be wrong.
206df6ac 581100e9 OUTLMIME!MimeOleInetDateToFileTime+0xd562
206df6b8 5811051d OUTLMIME!MimeOleInetDateToFileTime+0xd5d5
206df6e0 771562fa OUTLMIME!MimeOleInetDateToFileTime+0xda09
206df70c 77156d3a user32!InternalCallWinProc+0x23
206df784 771577c4 user32!UserCallWinProcCheckWow+0x109
206df7e4 77157bca user32!DispatchMessageWorker+0x3bc
206df7f4 581d74e6 user32!DispatchMessageA+0xf
206df830 581e04a3 OUTLPH!DllGetClassObject+0x5616
206df84c 581df9ac OUTLPH!DllGetClassObject+0xe5d3
206df880 6e558488 OUTLPH!DllGetClassObject+0xdadc
206df8a4 650fa17d OLMAPI32!HrCreateAsyncArgSet+0x479
206df8e8 650f8221 MSO!Ordinal381+0x48d
206df908 650f80a9 MSO!Ordinal9712+0x237
206df924 650f32d6 MSO!Ordinal9712+0xbf
206df958 650efe05 MSO!Ordinal5368+0x382
206df9b4 7725338a MSO!MsoFInitOffice+0x363
206df9c0 77789f72 kernel32!BaseThreadInitThunk+0xe
206dfa00 77789f45 ntdll!__RtlUserThreadStart+0x70
206dfa18 00000000 ntdll!_RtlUserThreadStart+0x1b

Because we have the stack unwind warning we double check the return address to verify that OUTLMIME module called heap free function. The call involves triple indirection of 58149f04 pointer address:
 
 
0:048&gt; ub 58110076
OUTLMIME!MimeOleInetDateToFileTime+0xd550:
58110064 8b0f            mov     ecx,dword ptr [edi]
58110066 3bcb            cmp     ecx,ebx
58110068 740e            je      OUTLMIME!MimeOleInetDateToFileTime+0xd564 (58110078)
5811006a a1049f1458      mov     eax,dword ptr [OUTLMIME!HrGetMIMEStreamForMAPIMsg+0xe528 (58149f04)]
5811006f 8b10            mov     edx,dword ptr [eax]
58110071 51              push    ecx
58110072 50              push    eax
58110073 ff5214          call    dword ptr [edx+14h]

0:048&gt; dps poi(poi(58149f04))+14 L1
76b97264  76aa6e4e ole32!CRetailMalloc_Free [d:\w7rtm\com\ole32\com\class\memapi.cxx @ 680]

0:048&gt; !heap -s
**************************************************************
*                                                            *
*                  HEAP ERROR DETECTED                       *
*                                                            *
**************************************************************

Details:

Heap address:  00280000
Error address: 1cecd3e8
Error type: HEAP_FAILURE_BLOCK_NOT_BUSY
Details:    The caller performed an operation (such as a free
            or a size check) that is illegal on a free block.
Follow-up:  Check the error's stack trace to find the culprit.


Stack trace:
                777ce045: ntdll!RtlFreeHeap+0x00000064
                76aa6e6a: ole32!CRetailMalloc_Free+0x0000001c
                58110076: OUTLMIME!MimeOleInetDateToFileTime+0x0000d562
                581100e9: OUTLMIME!MimeOleInetDateToFileTime+0x0000d5d5
                5811051d: OUTLMIME!MimeOleInetDateToFileTime+0x0000da09
                771562fa: user32!InternalCallWinProc+0x00000023
                77156d3a: user32!UserCallWinProcCheckWow+0x00000109
                771577c4: user32!DispatchMessageWorker+0x000003bc
                77157bca: user32!DispatchMessageA+0x0000000f
                581d74e6: OUTLPH!DllGetClassObject+0x00005616
                581e04a3: OUTLPH!DllGetClassObject+0x0000e5d3
                581df9ac: OUTLPH!DllGetClassObject+0x0000dadc
                6e558488: OLMAPI32!HrCreateAsyncArgSet+0x00000479
                650fa17d: MSO!Ordinal381+0x0000048d
                650f8221: MSO!Ordinal9712+0x00000237
                650f80a9: MSO!Ordinal9712+0x000000bf
[...]

0:048&gt; !heap -x 1cecd3e8
Entry     User      Heap      Segment       Size  PrevSize  Unused    Flags
-----------------------------------------------------------------------------
1cecd3e8  1cecd3f0  00280000  0f945f18        20      -            0  LFH;free</description>
		<content:encoded><![CDATA[<p>An example of Double Free detected in Windows 7:</p>
<p>0:048> k<br />
ChildEBP RetAddr<br />
206dee98 777f8567 ntdll!ZwWaitForSingleObject+0&#215;15<br />
206def1c 777f8695 ntdll!RtlReportExceptionEx+0&#215;14b<br />
206def74 7781e6e6 ntdll!RtlReportException+0&#215;86<br />
206def88 7781e763 ntdll!RtlpTerminateFailureFilter+0&#215;14<br />
206def94 777c73dc ntdll!RtlReportCriticalFailure+0&#215;67<br />
206defa8 777c7281 ntdll!_EH4_CallFilterFunc+0&#215;12<br />
206defd0 777ab499 ntdll!_except_handler4+0&#215;8e<br />
206deff4 777ab46b ntdll!ExecuteHandler2+0&#215;26<br />
206df018 777ab40e ntdll!ExecuteHandler+0&#215;24<br />
206df0a4 77760133 ntdll!RtlDispatchException+0&#215;127<br />
206df0a4 7781e753 ntdll!KiUserExceptionDispatcher+0xf<br />
206df5e8 7781f659 ntdll!RtlReportCriticalFailure+0&#215;57<br />
206df5f8 7781f739 ntdll!RtlpReportHeapFailure+0&#215;21<br />
206df62c 777ce045 ntdll!RtlpLogHeapFailure+0xa1<br />
206df65c 76aa6e6a ntdll!RtlFreeHeap+0&#215;64<br />
206df670 58110076 ole32!CRetailMalloc_Free+0&#215;1c [d:\w7rtm\com\ole32\com\class\memapi.cxx @ 687]<br />
WARNING: Stack unwind information not available. Following frames may be wrong.<br />
206df6ac 581100e9 OUTLMIME!MimeOleInetDateToFileTime+0xd562<br />
206df6b8 5811051d OUTLMIME!MimeOleInetDateToFileTime+0xd5d5<br />
206df6e0 771562fa OUTLMIME!MimeOleInetDateToFileTime+0xda09<br />
206df70c 77156d3a user32!InternalCallWinProc+0&#215;23<br />
206df784 771577c4 user32!UserCallWinProcCheckWow+0&#215;109<br />
206df7e4 77157bca user32!DispatchMessageWorker+0&#215;3bc<br />
206df7f4 581d74e6 user32!DispatchMessageA+0xf<br />
206df830 581e04a3 OUTLPH!DllGetClassObject+0&#215;5616<br />
206df84c 581df9ac OUTLPH!DllGetClassObject+0xe5d3<br />
206df880 6e558488 OUTLPH!DllGetClassObject+0xdadc<br />
206df8a4 650fa17d OLMAPI32!HrCreateAsyncArgSet+0&#215;479<br />
206df8e8 650f8221 MSO!Ordinal381+0&#215;48d<br />
206df908 650f80a9 MSO!Ordinal9712+0&#215;237<br />
206df924 650f32d6 MSO!Ordinal9712+0xbf<br />
206df958 650efe05 MSO!Ordinal5368+0&#215;382<br />
206df9b4 7725338a MSO!MsoFInitOffice+0&#215;363<br />
206df9c0 77789f72 kernel32!BaseThreadInitThunk+0xe<br />
206dfa00 77789f45 ntdll!__RtlUserThreadStart+0&#215;70<br />
206dfa18 00000000 ntdll!_RtlUserThreadStart+0&#215;1b</p>
<p>Because we have the stack unwind warning we double check the return address to verify that OUTLMIME module called heap free function. The call involves triple indirection of 58149f04 pointer address:</p>
<p> <br />
0:048> ub 58110076<br />
OUTLMIME!MimeOleInetDateToFileTime+0xd550:<br />
58110064 8b0f            mov     ecx,dword ptr [edi]<br />
58110066 3bcb            cmp     ecx,ebx<br />
58110068 740e            je      OUTLMIME!MimeOleInetDateToFileTime+0xd564 (58110078)<br />
5811006a a1049f1458      mov     eax,dword ptr [OUTLMIME!HrGetMIMEStreamForMAPIMsg+0xe528 (58149f04)]<br />
5811006f 8b10            mov     edx,dword ptr [eax]<br />
58110071 51              push    ecx<br />
58110072 50              push    eax<br />
58110073 ff5214          call    dword ptr [edx+14h]</p>
<p>0:048> dps poi(poi(58149f04))+14 L1<br />
76b97264  76aa6e4e ole32!CRetailMalloc_Free [d:\w7rtm\com\ole32\com\class\memapi.cxx @ 680]</p>
<p>0:048> !heap -s<br />
**************************************************************<br />
*                                                            *<br />
*                  HEAP ERROR DETECTED                       *<br />
*                                                            *<br />
**************************************************************</p>
<p>Details:</p>
<p>Heap address:  00280000<br />
Error address: 1cecd3e8<br />
Error type: HEAP_FAILURE_BLOCK_NOT_BUSY<br />
Details:    The caller performed an operation (such as a free<br />
            or a size check) that is illegal on a free block.<br />
Follow-up:  Check the error&#8217;s stack trace to find the culprit.</p>
<p>Stack trace:<br />
                777ce045: ntdll!RtlFreeHeap+0&#215;00000064<br />
                76aa6e6a: ole32!CRetailMalloc_Free+0&#215;0000001c<br />
                58110076: OUTLMIME!MimeOleInetDateToFileTime+0&#215;0000d562<br />
                581100e9: OUTLMIME!MimeOleInetDateToFileTime+0&#215;0000d5d5<br />
                5811051d: OUTLMIME!MimeOleInetDateToFileTime+0&#215;0000da09<br />
                771562fa: user32!InternalCallWinProc+0&#215;00000023<br />
                77156d3a: user32!UserCallWinProcCheckWow+0&#215;00000109<br />
                771577c4: user32!DispatchMessageWorker+0&#215;000003bc<br />
                77157bca: user32!DispatchMessageA+0&#215;0000000f<br />
                581d74e6: OUTLPH!DllGetClassObject+0&#215;00005616<br />
                581e04a3: OUTLPH!DllGetClassObject+0&#215;0000e5d3<br />
                581df9ac: OUTLPH!DllGetClassObject+0&#215;0000dadc<br />
                6e558488: OLMAPI32!HrCreateAsyncArgSet+0&#215;00000479<br />
                650fa17d: MSO!Ordinal381+0&#215;0000048d<br />
                650f8221: MSO!Ordinal9712+0&#215;00000237<br />
                650f80a9: MSO!Ordinal9712+0&#215;000000bf<br />
[&#8230;]</p>
<p>0:048> !heap -x 1cecd3e8<br />
Entry     User      Heap      Segment       Size  PrevSize  Unused    Flags<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
1cecd3e8  1cecd3f0  00280000  0f945f18        20      -            0  LFH;free</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Crash Dump Analysis &#187; Blog Archive &#187; Icons for Memory Dump Analysis Patterns (Part 41)</title>
		<link>https://www.dumpanalysis.org/blog/index.php/2007/08/19/crash-dump-analysis-patterns-part-23a/#comment-152683</link>
		<dc:creator>Crash Dump Analysis &#187; Blog Archive &#187; Icons for Memory Dump Analysis Patterns (Part 41)</dc:creator>
		<pubDate>Tue, 18 May 2010 10:37:46 +0000</pubDate>
		<guid>https://www.dumpanalysis.org/blog/index.php/2007/08/19/crash-dump-analysis-patterns-part-23a/#comment-152683</guid>
		<description>[...] we introduce an icon for Double Free (process heap) [...]</description>
		<content:encoded><![CDATA[<p>[&#8230;] we introduce an icon for Double Free (process heap) [&#8230;]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Crash Dump Analysis &#187; Blog Archive &#187; Crash Dump Analysis AntiPatterns (Part 13)</title>
		<link>https://www.dumpanalysis.org/blog/index.php/2007/08/19/crash-dump-analysis-patterns-part-23a/#comment-97765</link>
		<dc:creator>Crash Dump Analysis &#187; Blog Archive &#187; Crash Dump Analysis AntiPatterns (Part 13)</dc:creator>
		<pubDate>Tue, 06 Oct 2009 21:14:31 +0000</pubDate>
		<guid>https://www.dumpanalysis.org/blog/index.php/2007/08/19/crash-dump-analysis-patterns-part-23a/#comment-97765</guid>
		<description>[...] to catch buffer overwrites but not underwrites and heap can also be damaged by other means like double free, passing an invalid address or direct corruption of control structures via a dangling pointer. [...]</description>
		<content:encoded><![CDATA[<p>[&#8230;] to catch buffer overwrites but not underwrites and heap can also be damaged by other means like double free, passing an invalid address or direct corruption of control structures via a dangling pointer. [&#8230;]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Nitin</title>
		<link>https://www.dumpanalysis.org/blog/index.php/2007/08/19/crash-dump-analysis-patterns-part-23a/#comment-46269</link>
		<dc:creator>Nitin</dc:creator>
		<pubDate>Fri, 10 Oct 2008 12:33:27 +0000</pubDate>
		<guid>https://www.dumpanalysis.org/blog/index.php/2007/08/19/crash-dump-analysis-patterns-part-23a/#comment-46269</guid>
		<description>Hi,
  I tried all the examples given in this page which are supposed to genereate a crash, with pageheap enabled. But I could not see any crash. I was running the programs with and without debugger. OS was w2k3 and w2k8.</description>
		<content:encoded><![CDATA[<p>Hi,<br />
  I tried all the examples given in this page which are supposed to genereate a crash, with pageheap enabled. But I could not see any crash. I was running the programs with and without debugger. OS was w2k3 and w2k8.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Crash Dump Analysis &#187; Blog Archive &#187; Crash Dump Analysis Patterns (Part 71)</title>
		<link>https://www.dumpanalysis.org/blog/index.php/2007/08/19/crash-dump-analysis-patterns-part-23a/#comment-33945</link>
		<dc:creator>Crash Dump Analysis &#187; Blog Archive &#187; Crash Dump Analysis Patterns (Part 71)</dc:creator>
		<pubDate>Sat, 12 Jul 2008 08:38:04 +0000</pubDate>
		<guid>https://www.dumpanalysis.org/blog/index.php/2007/08/19/crash-dump-analysis-patterns-part-23a/#comment-33945</guid>
		<description>[...] happen due to corrupt or overwritten heap or pool control structures (for the latter see Double Free pattern). Another frequently seen specialization is called Critical Section Corruption which is [...]</description>
		<content:encoded><![CDATA[<p>[&#8230;] happen due to corrupt or overwritten heap or pool control structures (for the latter see Double Free pattern). Another frequently seen specialization is called Critical Section Corruption which is [&#8230;]</p>
]]></content:encoded>
	</item>
</channel>
</rss>
