<?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:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	>

<channel>
	<title>Software Diagnostics Library</title>
	<link>https://www.dumpanalysis.org/blog</link>
	<description>Structural and Behavioral Patterns for Software Diagnostics, Forensics and Prognostics</description>
	<pubDate>Mon, 04 May 2026 10:45:51 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.3.3</generator>
	<language>en</language>
			<item>
		<title>Trace Analysis Patterns (Part 257)</title>
		<link>https://www.dumpanalysis.org/blog/index.php/2026/03/08/trace-analysis-patterns-part-257/</link>
		<comments>https://www.dumpanalysis.org/blog/index.php/2026/03/08/trace-analysis-patterns-part-257/#comments</comments>
		<pubDate>Sun, 08 Mar 2026 19:43:20 +0000</pubDate>
		<dc:creator>Dmitry Vostokov</dc:creator>
		
		<category><![CDATA[Log Analysis]]></category>

		<category><![CDATA[Mathematics of Debugging]]></category>

		<category><![CDATA[Software Trace Analysis]]></category>

		<category><![CDATA[Trace Analysis Patterns]]></category>

		<guid isPermaLink="false">https://www.dumpanalysis.org/blog/index.php/2026/03/08/trace-analysis-patterns-part-257/</guid>
		<description><![CDATA[Trace Network is an analysis pattern in which traces and logs are treated as evidence for constructing an attributed interaction network N=(V, E), where vertices V are Motives, (Adjoint) Threads or Features of Activity, and their combinations, and directed edges E are created by an explicit correspondence rule between them, for example, request/response, causality, correlation [...]]]></description>
			<content:encoded><![CDATA[<p align="left"><strong>Trace Network</strong> is an analysis pattern in which traces and logs are treated as evidence for constructing an attributed interaction network N=(V, E), where vertices V are <a href="https://www.dumpanalysis.org/blog/index.php/2013/07/19/trace-analysis-patterns-part-74/">Motives</a>, (<a href="https://www.dumpanalysis.org/blog/index.php/2010/03/04/trace-analysis-patterns-part-17/">Adjoint</a>) <a href="https://www.dumpanalysis.org/blog/index.php/2009/08/03/trace-analysis-patterns-part-7/">Threads</a> or <a href="https://www.dumpanalysis.org/blog/index.php/2021/04/04/trace-analysis-patterns-part-205/">Features of Activity</a>, and their combinations, and directed edges E are created by an explicit correspondence rule between them, for example, request/response, causality, correlation propagation, spawn/join relation, or shared resource usage. A scope such as <a href="https://www.dumpanalysis.org/blog/index.php/2010/02/13/trace-analysis-patterns-part-16/">Time Delta</a> or some filtering for <a href="https://www.dumpanalysis.org/blog/index.php/2016/08/09/trace-analysis-patterns-part-128/">Message Patterns</a> may also be applied before the network construction.</p>
<p><img src="https://www.dumpanalysis.org/blog/files/TraceNetwork-450.png" /></p>
<p align="left">Edge aggregation, weighting, and labels are part of the construction specification, so the result is not merely a drawing but a diagnostic network on which structural properties such as fan-in, fan-out, hubs, components, and derived measures such as <a href="https://www.dumpanalysis.org/blog/index.php/2026/02/28/trace-analysis-patterns-part-256/">Trace Divergence </a>can be computed. This differs from T<a href="https://www.dumpanalysis.org/blog/index.php/2023/09/24/trace-analysis-patterns-part-235/">race Graph</a>, whose primary purpose is plotting or graphing trace data, and from <a href="https://www.dumpanalysis.org/blog/index.php/2023/02/05/trace-analysis-patterns-part-218/">Message Complex</a>, whose primary elements are messages connected geometrically rather than identities connected relationally.</p>
<p align="left"><strong>Trace Network</strong> analysis pattern differs from <a href="https://www.dumpanalysis.org/blog/index.php/2020/07/15/trace-analysis-patterns-part-187/">Causal History</a>, <a href="https://www.dumpanalysis.org/blog/index.php/2020/07/16/trace-analysis-patterns-part-188/">Causal Messages</a>, and <a href="https://www.dumpanalysis.org/blog/index.php/2020/07/17/trace-analysis-patterns-part-189/">Causal Chains</a> in both primitive elements and construction intent. <strong>Causal History</strong> is a message-level structure whose arrows represent possible causation; <strong>Causal Messages</strong> are those messages selected as causally relevant within that history; and <strong>Causal Chains</strong> are abstractions of causal relations into linked 1-chains, 2-chains, and higher n-chains. By contrast, <strong>Trace Network</strong> is a general constructed network whose vertices are typically diagnostic identities rather than messages, and whose edges are induced by an explicitly declared relation derived from trace evidence, such as causal linkage, adjoint correspondence, request/response coupling, shared-resource mediation, or correlation transfer. Accordingly, a <strong>Trace Network</strong> may encode causal structure as one special case, but it is not restricted to causality and does not by itself imply chain-complex abstraction.</p>
<p align="left">- Dmitry Vostokov @ <a href="http://www.dumpanalysis.org/">DumpAnalysis.org</a> + <a href="http://www.traceanalysis.org/">TraceAnalysis.org</a> -</p>
]]></content:encoded>
			<wfw:commentRss>https://www.dumpanalysis.org/blog/index.php/2026/03/08/trace-analysis-patterns-part-257/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Trace Analysis Patterns (Part 256)</title>
		<link>https://www.dumpanalysis.org/blog/index.php/2026/02/28/trace-analysis-patterns-part-256/</link>
		<comments>https://www.dumpanalysis.org/blog/index.php/2026/02/28/trace-analysis-patterns-part-256/#comments</comments>
		<pubDate>Sat, 28 Feb 2026 21:49:53 +0000</pubDate>
		<dc:creator>Dmitry Vostokov</dc:creator>
		
		<category><![CDATA[Log Analysis]]></category>

		<category><![CDATA[Mathematics of Debugging]]></category>

		<category><![CDATA[Software Trace Analysis]]></category>

		<category><![CDATA[Trace Analysis Patterns]]></category>

		<guid isPermaLink="false">https://www.dumpanalysis.org/blog/index.php/2026/02/28/trace-analysis-patterns-part-256/</guid>
		<description><![CDATA[Sometimes, we want to count the number of (Adjoint) Threads of Activity corresponding to a specified ATID:

We can view this as (adjoint) threads coming into or out of the specified ATID, similar to divergence, which gives the name Trace Divergence log analysis pattern. This analysis pattern differs from Cord of Activity, which is not a [...]]]></description>
			<content:encoded><![CDATA[<p align="left">Sometimes, we want to count the number of (<a href="https://www.dumpanalysis.org/blog/index.php/2010/03/04/trace-analysis-patterns-part-17/">Adjoint</a>) <a href="https://www.dumpanalysis.org/blog/index.php/2009/08/03/trace-analysis-patterns-part-7/">Threads of Activity</a> corresponding to a specified ATID:</p>
<p><img src="https://www.dumpanalysis.org/blog/files/TraceDivergence-450.png" /></p>
<p align="left">We can view this as (adjoint) threads coming into or out of the specified ATID, similar to <a href="https://en.wikipedia.org/wiki/Divergence">divergence</a>, which gives the name <strong>Trace Divergence</strong> log analysis pattern. This analysis pattern differs from <a href="https://www.dumpanalysis.org/blog/index.php/2020/09/13/trace-analysis-patterns-part-199/">Cord of Activity</a>, which is not a number, and the latter may not have a single, unvarying source or target ATID to which other A(TID)s correspond. It is also different from <a href="https://www.dumpanalysis.org/blog/index.php/2020/07/11/trace-analysis-patterns-part-184/">Trace Flux</a>, where the number of threads is an external variable not related to traces and logs, and from <a href="https://www.dumpanalysis.org/blog/index.php/2019/11/06/trace-analysis-patterns-part-181/">Message Flow</a>, which operates on the individual message level, temporal in nature, and counters are set in advance.</p>
<p align="left">Typical examples include SYN floods in <a href="https://www.dumpanalysis.org/blog/index.php/2012/07/19/network-trace-analysis-patterns-part-1/">network traces</a> (src and dst ATIDs), the number of threads corresponding to the specific PID, or the number of threads contending for the specified API.</p>
<p align="left"><a href="https://www.dumpanalysis.org/blog/index.php/2014/05/25/trace-analysis-patterns-part-87/">Activity Divergence</a> may look similar, but its surface is temporal, whereas <strong>Trace Divergence</strong>&#8217;s, surface is structural. There can be several Trace Divergencies in the same trace or log since they are per ATID.</p>
<p align="left">Formally, <strong>Trace Divergence</strong> is a property of a constructed graph, for example, D<sub>in</sub>​(a)=∣{x∈V∣x→a}∣; <strong>Activity Divergence</strong> is a property of a constructed signal, interpreted as dynamics, for example, D<sub>in</sub>​(a,t).</p>
<p align="left">- Dmitry Vostokov @ <a href="http://www.dumpanalysis.org/">DumpAnalysis.org</a> + <a href="http://www.traceanalysis.org/">TraceAnalysis.org</a> -</p>
]]></content:encoded>
			<wfw:commentRss>https://www.dumpanalysis.org/blog/index.php/2026/02/28/trace-analysis-patterns-part-256/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Crash Dump Analysis Patterns (Part 305)</title>
		<link>https://www.dumpanalysis.org/blog/index.php/2026/01/09/crash-dump-analysis-patterns-part-305/</link>
		<comments>https://www.dumpanalysis.org/blog/index.php/2026/01/09/crash-dump-analysis-patterns-part-305/#comments</comments>
		<pubDate>Fri, 09 Jan 2026 12:12:02 +0000</pubDate>
		<dc:creator>Dmitry Vostokov</dc:creator>
		
		<category><![CDATA[ARM64 Windows]]></category>

		<category><![CDATA[Crash Dump Analysis]]></category>

		<category><![CDATA[Crash Dump Patterns]]></category>

		<guid isPermaLink="false">https://www.dumpanalysis.org/blog/index.php/2026/01/09/crash-dump-analysis-patterns-part-305/</guid>
		<description><![CDATA[In ARM64 Virtualized Process memory dumps, their Stack Trace Collections, and their Execution Residue we may see pointers that point to ISA-Specific Code. For example, in an x86 process thread stack we may see this x86 disassembly of code pointers:
0:001&#62; u 7573e81c
kernel32!BaseThreadInitThunk+0x2c:
7573e81c 2808            sub [...]]]></description>
			<content:encoded><![CDATA[<p align="left">In ARM64 <a href="https://www.dumpanalysis.org/blog/index.php/2025/11/16/crash-dump-analysis-patterns-part-26b/">Virtualized Process</a> memory dumps, their <a href="https://www.dumpanalysis.org/blog/index.php/2007/09/14/crash-dump-analysis-patterns-part-27/">Stack Trace Collections</a>, and their <a href="https://www.dumpanalysis.org/blog/index.php/2008/04/29/crash-dump-analysis-patterns-part-60/">Execution Residue</a> we may see pointers that point to <strong>ISA-Specific Code</strong>. For example, in an x86 process thread stack we may see this x86 disassembly of code pointers:</p>
<p align="left"><font size="1"><code>0:001&gt; u 7573e81c<br />
kernel32!BaseThreadInitThunk+0x2c:<br />
7573e81c 2808            sub     byte ptr [eax],cl<br />
7573e81e 0090083142b9    add     byte ptr [eax-46BDCEF8h],dl<br />
7573e824 e003            loopne  kernel32!BaseThreadInitThunk+0x39 (7573e829)<br />
7573e826 002a            add     byte ptr [edx],ch<br />
7573e828 0001            add     byte ptr [ecx],al<br />
7573e82a 3f              aas<br />
7573e82b d6              ???<br />
7573e82c 2808            sub     byte ptr [eax],cl</code></font></p>
<p align="left"><font size="1"><code>0:001&gt; u 76e12640<br />
KERNELBASE!SetEvent:<br />
76e12640 fd              std<br />
76e12641 7bbe            jnp     KERNELBASE!UnmapViewOfFile+0x11 (76e12601)<br />
76e12643 29fd            sub     ebp,edi<br />
76e12645 0300            add     eax,dword ptr [eax]<br />
76e12647 91              xchg    eax,ecx<br />
76e12648 6810009008      push    8900010h<br />
76e1264d a5              movs    dword ptr es:[edi],dword ptr [esi]<br />
76e1264e 43              inc     ebx</code></font></p>
<p align="left"><font size="1"><code>0:001&gt; ub 76e0c11c<br />
^ Unable to find valid previous instruction for 'ub  76e0c11c'</code></font></p>
<p align="left"><font size="1"><code>0:001&gt; ub 5f82d9c9<br />
ACE!ACEInitializeEx+0x65573:<br />
5f82d9b7 c3              ret<br />
5f82d9b8 56              push    esi<br />
5f82d9b9 57              push    edi<br />
5f82d9ba 8b3da8b0835f    mov     edi,dword ptr [ACE!ACEInitializeEx+0x72c64 (5f83b0a8)]<br />
5f82d9c0 8bf1            mov     esi,ecx<br />
5f82d9c2 6aff            push    0FFFFFFFFh<br />
5f82d9c4 ff7610          push    dword ptr [esi+10h]<br />
5f82d9c7 ffd7            <font color="blue">call    edi</font></code></font></p>
<p align="left"><font size="1"><code>0:001&gt; ub ntdll!NtWaitForSingleObject+0xc<br />
ntdll!NtMapUserPhysicalPagesScatter:<br />
779fd030 b803000a00      mov     eax,0A0003h<br />
779fd035 ba70a6a077      mov     edx,offset ntdll!Wow64SystemServiceCall (77a0a670)<br />
779fd03a ffd2            call    edx<br />
779fd03c c20c00          ret     0Ch<br />
779fd03f 90              nop<br />
ntdll!NtWaitForSingleObject:<br />
779fd040 b804000d00      mov     eax,0D0004h<br />
779fd045 ba70a6a077      mov     edx,offset ntdll!Wow64SystemServiceCall (77a0a670)<br />
779fd04a ffd2            <font color="blue">call    edx</font></code></font></p>
<p align="left">The first 3 look like <a href="https://www.dumpanalysis.org/blog/index.php/2008/03/27/crash-dump-analysis-patterns-part-56/">Wild Code</a> (or Coincidental Symbolic Information if we use function names). But if we switch to CHPE architecture, we get the inverse, the first 3 right and the last 2 invalid:</p>
<p align="left"><font size="1"><code>0:001&gt; .effmach CHPE<br />
Effective machine: CHPE on X86 (read only) (CHPE)</code></font></p>
<p align="left"><font size="1"><code>0:001:CHPE&gt; u 7573e81c<br />
kernel32!BaseThreadInitThunk+0x2c:<br />
7573e81c 90000828 adrp        x8,kernel32!_imp_#LdrQueryImageFileKeyOption (75842000)<br />
7573e820 b9423108 ldr         w8,[x8,#0x230]<br />
7573e824 2a0003e0 mov         w0,w0<br />
7573e828 d63f0100 blr         x8<br />
7573e82c 90000828 adrp        x8,kernel32!_imp_#LdrQueryImageFileKeyOption (75842000)<br />
7573e830 b9429d08 ldr         w8,[x8,#0x29C]<br />
7573e834 d63f0100 blr         x8<br />
7573e838 36225700 tbz         w0,#4,kernel32!#IsFusionFullySupported+0x50 (75743318)</code></font></p>
<p align="left"><font size="1"><code>0:001:CHPE&gt; u 76e12640<br />
KERNELBASE!SetEvent:<br />
76e12640 29be7bfd stp         wfp,wlr,[sp,#-0x10]!<br />
76e12644 910003fd mov         fp,sp<br />
76e12648 90001068 adrp        x8,KERNELBASE!__hybrid_auxiliary_iat (7701e000)<br />
76e1264c b943a508 ldr         w8,[x8,#0x3A4]<br />
76e12650 2a0003e0 mov         w0,w0<br />
76e12654 52800001 mov         w1,#0<br />
76e12658 d63f0100 blr         x8<br />
76e1265c 37f887e0 tbnz        w0,#0x1F,KERNELBASE!BasepCheckImageVersion+0xe8 (76e13758)</code></font></p>
<p align="left"><font size="1"><code>0:001:CHPE&gt; ub 76e0c11c<br />
KERNELBASE!#WaitForSingleObjectEx+0xdc:<br />
76e0c0fc 110083a2 add         w2,wfp,#0x20<br />
76e0c100 b90017a2 str         w2,[fp,#0x14]<br />
76e0c104 53001e61 uxtb        w1,w19<br />
76e0c108 2a0203e2 mov         w2,w2<br />
76e0c10c 2a0003e0 mov         w0,w0<br />
76e0c110 d0001088 adrp        x8,KERNELBASE!__hybrid_auxiliary_iat (7701e000)<br />
76e0c114 b9440d08 ldr         w8,[x8,#0x40C]<br />
76e0c118 d63f0100 <font color="blue">blr         x8</font></code></font></p>
<p align="left"><font size="1"><code>0:001:CHPE&gt; ub 5f82d9c9<br />
ACE!ACEInitializeEx+0x65565:<br />
5f82d9a9 000003e8 ???<br />
^ Memory access error in 'ub 5f82d9c9'</code></font></p>
<p align="left"><font size="1"><code>0:001:CHPE&gt; ub ntdll!NtWaitForSingleObject+0xc<br />
ntdll!NtAcceptConnectPort+0xc:<br />
779fd02c 900018c2 adrp        x2,77d15000<br />
ntdll!NtMapUserPhysicalPagesScatter:<br />
779fd030 0a0003b8 and         w24,wfp,w0<br />
779fd034 a670ba00 ???<br />
779fd038 d2ff77a0 mov         x0,#-0x443000000000000<br />
779fd03c 90000cc2 adrp        x2,77b95000<br />
ntdll!NtWaitForSingleObject:<br />
779fd040 0d0004b8 st1         {v24.b}[1],[x5]<br />
779fd044 a670ba00 ???<br />
779fd048 d2ff77a0 mov         x0,#-0x443000000000000</code></font></p>
<p align="left"><font size="1"><code>0:001:CHPE&gt; .effmach x86<br />
Effective machine: x86 compatible (x86)</code></font></p>
<p align="left">The same is observable for the x64 process thread raw stack region pointers:</p>
<p align="left"><font size="1"><code>0:000&gt; ub 00007ff7`83432ac9<br />
pointers_c!invoke_main+0x16:<br />
00007ff7`83432aa6 4889442430      mov     qword ptr [rsp+30h],rax<br />
00007ff7`83432aab e82ae8ffff      call    pointers_c!ILT+725(__p___argc) (00007ff7`834312da)<br />
00007ff7`83432ab0 8b00            mov     eax,dword ptr [rax]<br />
00007ff7`83432ab2 89442420        mov     dword ptr [rsp+20h],eax<br />
00007ff7`83432ab6 4c8b442428      mov     r8,qword ptr [rsp+28h]<br />
00007ff7`83432abb 488b542430      mov     rdx,qword ptr [rsp+30h]<br />
00007ff7`83432ac0 8b4c2420        mov     ecx,dword ptr [rsp+20h]<br />
00007ff7`83432ac4 e8b7e7ffff      <font color="blue">call    pointers_c!ILT+635(main) (00007ff7`83431280)</font></code></font></p>
<p align="left"><font size="1"><code>0:000&gt; ub 00007ff8`046917ac<br />
^ Unable to find valid previous instruction for 'ub 00007ff8`046917ac'</code></font></p>
<p>0:000&gt; .effmach ARM64EC<br />
Effective machine: ARM64EC (CHPEv2 on X64) (ARM64EC)</p>
<p align="left"><font size="1"><code>0:000:ARM64EC&gt; ub 00007ff7`83432ac9<br />
pointers_c!invoke_main+0x19:<br />
00007ff7`83432aa9 2ae83024 ???<br />
^ Memory access error in 'ub 00007ff7`83432ac9'</code></font></p>
<p align="left"><font size="1"><code>0:000:ARM64EC&gt; ub 00007ff8`046917ac<br />
kernel32!$iexit_thunk$cdecl$d$d+0x2c:<br />
00007ff8`0469178c 00000000 ???<br />
kernel32!$iexit_thunk$cdecl$i8$i8:<br />
00007ff8`04691790 d503237f pacibsp<br />
00007ff8`04691794 a9bf7bfd stp         fp,lr,[sp,#-0x10]!<br />
00007ff8`04691798 910003fd mov         fp,sp<br />
00007ff8`0469179c d10083ff sub         sp,sp,#0x20<br />
00007ff8`046917a0 b0000048 adrp        x8,kernel32!_os_arm64x_dispatch_call_no_redirect (00007ff8`0469a000)<br />
00007ff8`046917a4 f9400110 ldr         xip0,[x8]<br />
00007ff8`046917a8 d63f0200 <font color="blue">blr         xip0</font></code></font></p>
<p align="left"><font size="1"><code>0:000:ARM64EC&gt; .effmach AMD64<br />
Effective machine: x64 (AMD64)</code></font></p>
<p align="left">- Dmitry Vostokov @ <a href="http://www.dumpanalysis.org/">DumpAnalysis.org</a> + <a href="http://www.traceanalysis.org/">TraceAnalysis.org</a> -</p>
]]></content:encoded>
			<wfw:commentRss>https://www.dumpanalysis.org/blog/index.php/2026/01/09/crash-dump-analysis-patterns-part-305/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Crash Dump Analysis Patterns (Part 304)</title>
		<link>https://www.dumpanalysis.org/blog/index.php/2025/12/07/crash-dump-analysis-patterns-part-304/</link>
		<comments>https://www.dumpanalysis.org/blog/index.php/2025/12/07/crash-dump-analysis-patterns-part-304/#comments</comments>
		<pubDate>Sun, 07 Dec 2025 22:36:04 +0000</pubDate>
		<dc:creator>Dmitry Vostokov</dc:creator>
		
		<category><![CDATA[Core Dump Analysis]]></category>

		<category><![CDATA[Crash Dump Analysis]]></category>

		<category><![CDATA[Crash Dump Patterns]]></category>

		<category><![CDATA[Structural Diagnostics]]></category>

		<category><![CDATA[Structural Memory Patterns]]></category>

		<category><![CDATA[x64 Windows]]></category>

		<guid isPermaLink="false">https://www.dumpanalysis.org/blog/index.php/2025/12/07/crash-dump-analysis-patterns-part-304/</guid>
		<description><![CDATA[The Latent Structure pattern addresses situations where a memory region appears raw and untyped yet shows early, incomplete signs of structural organization. Signals, such as small or pointer-like values, alignment regularities, recurring byte sequences, partial strings, or fragments that resemble fields, suggest that a real structure might exist, but cannot yet be interpreted safely or [...]]]></description>
			<content:encoded><![CDATA[<p align="left">The <strong>Latent Structure</strong> pattern addresses situations where a memory region appears raw and untyped yet shows early, incomplete signs of structural organization. Signals, such as small or pointer-like values, alignment regularities, recurring byte sequences, partial strings, or fragments that resemble fields, suggest that a real structure might exist, but cannot yet be interpreted safely or confidently. <strong>Latent Structure</strong> represents the pre-suspect stage in structural diagnostics: the point where the analyst notices potential form but must resist premature interpretation. Acting too early risks misclassifying problems and misidentifying root causes. Several forces complicate this stage: partial overwrites, coincidental alignments, ABI or version mismatches, and cognitive biases that encourage overinterpretation. This analysis pattern, therefore, emphasizes careful, hypothesis-driven exploration using techniques such as tentative structure casting, pointer-chain heuristics, checks for internal semantic coherence, software internals, and domain knowledge, all without assuming the structure’s validity. When enough evidence accumulates, a <strong>Latent Structure</strong> transitions into a <strong>Suspect Structure</strong> (subject of the next analysis pattern), where it becomes testable.</p>
<p>For example, we may see these fragment in <a href="https://www.dumpanalysis.org/blog/index.php/2008/04/29/crash-dump-analysis-patterns-part-60/">Execution Residue</a>:</p>
<p align="left"><font size="1"><code>00000029`e7efeb00  00001f80`0010004b<br />
00000029`e7efeb08  0053002b`002b0033<br />
00000029`e7efeb10  00000242`002b002b</code></font></p>
<p align="left">Finally, we write the formal pattern structure card.</p>
<p align="left"><em>Intent</em></p>
<p align="left">Detect hidden or unclear structural organization in raw memory regions that exhibit early indicators of structure-like form but whose types are not yet known.</p>
<p align="left"><em>Context</em></p>
<p align="left">Appears in:<br />
<a href="https://www.dumpanalysis.org/blog/index.php/2008/04/29/crash-dump-analysis-patterns-part-60/">Execution Residue</a>, <a href="https://www.dumpanalysis.org/blog/index.php/2020/06/14/crash-dump-analysis-patterns-part-268/">Pointer Cone</a>, <a href="http://www.dumpanalysis.org/blog/index.php/2010/10/01/structural-memory-patterns-part-4/">Memory Region</a>, and <a href="http://www.dumpanalysis.org/blog/index.php/2016/08/08/structural-memory-patterns-part-8/">Region Strata</a>.</p>
<p align="left"><em>Problem</em></p>
<p align="left">A memory dump shows a region of raw bytes without explicit type information that contains hints suggesting that a structure may be present. Prematurely interpreting such memory can lead to false positives, misclassification, incorrect casting, and a chain of misleading hypotheses.</p>
<p align="left"><em>Forces</em></p>
<p>Data:</p>
<ul>
<li>Memory may contain partial structures</li>
<li>Overwrites blur structure boundaries</li>
<li>Random-looking regions may hide structured subregions</li>
</ul>
<p>Semantics:</p>
<ul>
<li>Pointer-like values may be real or coincidental</li>
<li>Partial strings</li>
<li>Field alignments may appear regular due to chance</li>
</ul>
<p>Modules:</p>
<ul>
<li>Coincidental symbols</li>
<li>ABI or version mismatches</li>
</ul>
<p>Cognitive biases:</p>
<ul>
<li>Insufficient domain knowledge</li>
<li>Premature suspicion</li>
</ul>
<p align="left"><em>Symptoms</em></p>
<ul>
<li>Structural hints in bytes</li>
<li>Pointer-like values</li>
<li>Strings and identity hints</li>
<li>Alignment and regularity</li>
<li>Recurring patterns across multiple memory locations</li>
<li>Partial structure validity</li>
<li>Incomplete or corrupt-like structure</li>
</ul>
<p align="left"><em>Resolution Strategies</em></p>
<ul>
<li>Structure casting</li>
<li>Heuristic field and pointer chain analysis</li>
<li>Verification of internal semantic coherence</li>
</ul>
<p align="left"><em>Resulting Context</em></p>
<p align="left">Structure becomes Suspect and testable for validity.</p>
<p align="left"><em>Related Patterns</em></p>
<p><a href="https://www.dumpanalysis.org/blog/index.php/2020/02/23/hidden-artifact-patterns/">Hidden Artifact Patterns</a>, <a href="https://www.dumpanalysis.org/blog/index.php/2015/02/21/crash-dump-analysis-patterns-part-221/">Corrupt Structure</a>, <a href="https://www.dumpanalysis.org/blog/index.php/2011/04/24/crash-dump-analysis-patterns-part-135/">Module Hint</a>, <a href="https://www.dumpanalysis.org/blog/index.php/2014/04/28/falsity-and-coincidence-patterns/">Falsity and Coincidence Patterns</a>, <a href="https://www.dumpanalysis.org/blog/index.php/2010/10/18/crash-dump-analysis-patterns-part-110/">Shared Buffer Overwrite</a>, <a href="https://www.dumpanalysis.org/blog/index.php/2011/12/05/crash-dump-analysis-patterns-part-159/">Value References</a>, <a href="https://www.dumpanalysis.org/blog/index.php/2013/11/09/crash-dump-analysis-patterns-part-202/">Small Value</a>, <a href="https://www.dumpanalysis.org/blog/index.php/2014/06/21/crash-dump-analysis-patterns-part-207/">Design Value</a>, <a href="https://www.dumpanalysis.org/blog/index.php/2013/12/07/crash-dump-analysis-patterns-part-203/">Shared Structure</a>, and <a href="https://www.dumpanalysis.org/blog/index.php/2012/02/12/crash-dump-analysis-patterns-part-167/">Regular Data</a>.</p>
<p><a href="http://www.dumpanalysis.org/files/Latent-Structure-Pattern-Formal-Structure.pdf">Formal Card</a></p>
<p align="left">- Dmitry Vostokov @ </a><a href="http://www.dumpanalysis.org/">DumpAnalysis.org</a> + <a href="http://www.traceanalysis.org/">TraceAnalysis.org</a> -</p>
]]></content:encoded>
			<wfw:commentRss>https://www.dumpanalysis.org/blog/index.php/2025/12/07/crash-dump-analysis-patterns-part-304/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Crash Dump Analysis Patterns (Part 303)</title>
		<link>https://www.dumpanalysis.org/blog/index.php/2025/11/30/crash-dump-analysis-patterns-part-303/</link>
		<comments>https://www.dumpanalysis.org/blog/index.php/2025/11/30/crash-dump-analysis-patterns-part-303/#comments</comments>
		<pubDate>Sun, 30 Nov 2025 14:08:48 +0000</pubDate>
		<dc:creator>Dmitry Vostokov</dc:creator>
		
		<category><![CDATA[ARM64 Linux]]></category>

		<category><![CDATA[ARM64 Windows]]></category>

		<category><![CDATA[Crash Dump Analysis]]></category>

		<category><![CDATA[Crash Dump Patterns]]></category>

		<guid isPermaLink="false">https://www.dumpanalysis.org/blog/index.php/2025/11/30/crash-dump-analysis-patterns-part-303/</guid>
		<description><![CDATA[When looking at Execution Residue in Windows ARM64 memory dumps, we may notice Encoded Pointers in the form of authenticated pointers (PAC, Pointer Authentication Code, see the Linux guide and Windows info). For example:
0:000&#62; dps 00000053f62fc000 00000053f6300000
...
00000053`f62ffe28  e817fff7`6a0bc054 functions_c!__scrt_common_main+0x14
...
The return address isn&#8217;t possible to use directly (Invalid Pointer):
0:000&#62; ub e817fff7`6a0bc054
e817fff7`6a0bc034 ?? ???
^ Memory access [...]]]></description>
			<content:encoded><![CDATA[<p align="left">When looking at <a href="https://www.dumpanalysis.org/blog/index.php/2008/04/29/crash-dump-analysis-patterns-part-60/">Execution Residue</a> in Windows ARM64 memory dumps, we may notice <strong>Encoded Pointers</strong> in the form of authenticated pointers (PAC, Pointer Authentication Code, see the <a href="https://learn.arm.com/learning-paths/servers-and-cloud-computing/pac/">Linux guide</a> and <a href="https://www.preludesecurity.com/blog/windows-arm64-internals-deconstructing-pointer-authentication">Windows info</a>). For example:</p>
<p align="left"><font size="1"><code>0:000&gt; dps 00000053f62fc000 00000053f6300000<br />
...<br />
00000053`f62ffe28  e817fff7`6a0bc054 functions_c!__scrt_common_main+0x14<br />
...</code></font></p>
<p align="left">The return address isn&#8217;t possible to use directly (<a href="https://www.dumpanalysis.org/blog/index.php/2006/12/18/crash-dump-analysis-patterns-part-6/">Invalid Pointer</a>):</p>
<p align="left"><font size="1"><code>0:000&gt; ub e817fff7`6a0bc054<br />
e817fff7`6a0bc034 ?? ???<br />
<font color="red">^ Memory access error in &#8216;ub e817fff7`6a0bc054&#8242;</font></code></font></p>
<p align="left">However, the symbolic reference is ok:</p>
<p align="left"><font size="1"><code>0:000&gt; ub functions_c!__scrt_common_main+0x14<br />
functions_c!pre_cpp_initialization+0x7c:<br />
00007ff7`6a0bc034 00000000 ???<br />
00007ff7`6a0bc038 00000000 ???<br />
00007ff7`6a0bc03c 00000000 ???<br />
functions_c!__scrt_common_main:<br />
00007ff7`6a0bc040 d503237f pacibsp<br />
00007ff7`6a0bc044 a9bf7bfd stp         fp,lr,[sp,#-0x10]!<br />
00007ff7`6a0bc048 910003fd mov         fp,sp<br />
00007ff7`6a0bc04c 97ffd81f bl          functions_c!ILT+4284(__security_init_cookie) (00007ff7`6a0b20c8)<br />
00007ff7`6a0bc050 94000016 bl          functions_c!__scrt_common_main_seh (00007ff7`6a0bc0a8)</code></font></p>
<p align="left">Because of that, <a href="https://www.dumpanalysis.org/blog/index.php/2014/10/07/crash-dump-analysis-patterns-part-213/">Rough Stack</a> that uses the <strong>dpS</strong> WinDbg command instead, omits such valid symbolic references.</p>
<p>If you find such pointers, you can replace the higher 4-byte part with the higher part of the module start address, for example:</p>
<p align="left"><font size="1"><code>0:000&gt; lm<br />
start             end                 module name<br />
<font color="blue">00007ff7`6a0a0000</font> 00007ff7`6a0d0000   functions_c<br />
&#8230;</code></font></p>
<p align="left"><font size="1"><code>0:000&gt; ub <font color="blue">00007ff7</font>`6a0bc054<br />
functions_c!pre_cpp_initialization+0&#215;7c:<br />
00007ff7`6a0bc034 00000000 ???<br />
00007ff7`6a0bc038 00000000 ???<br />
00007ff7`6a0bc03c 00000000 ???<br />
functions_c!__scrt_common_main:<br />
00007ff7`6a0bc040 d503237f pacibsp<br />
00007ff7`6a0bc044 a9bf7bfd stp         fp,lr,[sp,#-0&#215;10]!<br />
00007ff7`6a0bc048 910003fd mov         fp,sp<br />
00007ff7`6a0bc04c 97ffd81f bl          functions_c!ILT+4284(__security_init_cookie) (00007ff7`6a0b20c8)<br />
00007ff7`6a0bc050 94000016 bl          functions_c!__scrt_common_main_seh (00007ff7`6a0bc0a8)</code></font></p>
<p align="left">Of course, this may not work for pointers, encoded by the Windows EncodePointer API.</p>
<p align="left">Finally, we write the formal pattern structure card for <strong>Encoded Pointer</strong>.</p>
<p align="left"><em>Intent</em></p>
<p align="left">To recognize situations where a pointer stored in memory is not directly usable: its value must be interpreted or transformed before it can be resolved to a valid code or data address.</p>
<p align="left"><em>Context</em></p>
<p align="left">Appears in:<br />
<a href="https://www.dumpanalysis.org/blog/index.php/2007/09/10/crash-dump-analysis-patterns-part-25/">Stack Trace</a>, <a href="https://www.dumpanalysis.org/blog/index.php/2008/04/29/crash-dump-analysis-patterns-part-60/">Execution Residue</a>, <a href="https://www.dumpanalysis.org/blog/index.php/2020/06/15/crash-dump-analysis-patterns-part-269/">Context Pointer</a>, <a href="https://www.dumpanalysis.org/blog/index.php/2007/11/06/crash-dump-analysis-patterns-part-34/">Historical Information</a>.</p>
<p align="left">Common environments:</p>
<ul>
<li><a href="https://en.wikipedia.org/wiki/Tagged_pointer">Tagged pointers</a></li>
<li>ARM64 pointer authentication (PAC)</li>
<li>Top-Byte-Ignore tagging (AArch64)</li>
<li>ASLR and relocations that have not yet been applied in the captured memory</li>
<li>Managed space compressed and metadata-embedded GC pointers</li>
<li>Objective-C and Swift tagged ISA pointers</li>
<li>Sanitizers or checking runtimes that add metadata bits</li>
</ul>
<p align="left"><em>Problem</em></p>
<p align="left">A pointer in the dump visually appears to be an address, but fails to resolve using normal symbolic or spatial checks; dereferencing its raw value yields an incorrect memory address or a memory error.</p>
<p align="left"><em>Forces</em></p>
<ul>
<li>Performance/security constraints favor encoded pointer formats</li>
<li>Debugger views often show raw stack/heap</li>
<li>Encoding schemes vary by platform and compiler</li>
<li>Hardware PAC may prevent guessing the correct pointer form without a proper decode context</li>
</ul>
<p align="left"><em>Symptoms</em></p>
<ul>
<li>Pointer value not inside any loaded module or valid virtual address range</li>
<li>Symbol resolution differs</li>
<li>Adjacent stack slots look pointer-like, but this one does not</li>
<li>Backwards disassembly shows an incorrect frame</li>
</ul>
<p align="left"><em>Resolution Strategies</em></p>
<ul>
<li>Decode PAC</li>
<li>Canonicalize upper bits</li>
<li>Strip tags</li>
<li>Expand bits</li>
<li>Apply relocation deltas</li>
<li>Mask metadata</li>
</ul>
<p align="left"><em>Resulting Context</em></p>
<p align="left">After correct interpretation, the pointer becomes:</p>
<ul>
<li>Resolvable to a target symbol</li>
<li>Walkable for call-stack reconstruction</li>
<li>Safe for dereferencing in analysis context</li>
<li>Enables further analysis</li>
</ul>
<p><a href="http://www.dumpanalysis.org/files/Encoded-Pointer-Pattern-Formal-Structure.pdf"><br />
Formal card </a></p>
<p align="left">- Dmitry Vostokov @ <a href="http://www.dumpanalysis.org/">DumpAnalysis.org</a> + <a href="http://www.traceanalysis.org/">TraceAnalysis.org</a> -</p>
]]></content:encoded>
			<wfw:commentRss>https://www.dumpanalysis.org/blog/index.php/2025/11/30/crash-dump-analysis-patterns-part-303/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Crash Dump Analysis Patterns (Part 302)</title>
		<link>https://www.dumpanalysis.org/blog/index.php/2025/11/17/crash-dump-analysis-patterns-part-302/</link>
		<comments>https://www.dumpanalysis.org/blog/index.php/2025/11/17/crash-dump-analysis-patterns-part-302/#comments</comments>
		<pubDate>Mon, 17 Nov 2025 21:16:32 +0000</pubDate>
		<dc:creator>Dmitry Vostokov</dc:creator>
		
		<category><![CDATA[ARM64 Windows]]></category>

		<category><![CDATA[Crash Dump Analysis]]></category>

		<category><![CDATA[Crash Dump Patterns]]></category>

		<category><![CDATA[Reverse Engineering]]></category>

		<guid isPermaLink="false">https://www.dumpanalysis.org/blog/index.php/2025/11/17/crash-dump-analysis-patterns-part-302/</guid>
		<description><![CDATA[The list of local variables displayed by the dv WinDbg command may contain False Local Addresses, especially if some non-standard alignment is used on ARM64 platforms. For example, we get this address that doesn&#8217;t look correct if we associate it with the source code:
* _Alignas(4096) long long ll = 1;
0:000&#62; dv /V
0000000b`970fe260 @x27+0&#215;1000   [...]]]></description>
			<content:encoded><![CDATA[<p align="left">The list of local variables displayed by the <strong>dv</strong> WinDbg command may contain <strong>False Local Addresses</strong>, especially if some non-standard alignment is used on ARM64 platforms. For example, we get this address that doesn&#8217;t look correct if we associate it with the source code:</p>
<p align="left"><font size="1"><code>* _Alignas(4096) long long ll = 1;</code></font></p>
<p align="left"><font size="1"><code>0:000&gt; dv /V<br />
<font color="red">0000000b`970fe260</font> @x27+0&#215;1000                    ll = 0n-3689348814741910324<br />
0000000b`970fd490 @x27+0&#215;0230                 align = 8 </code></font></p>
<p align="left">It is not aligned on the page boundary, and the value is not the expected 1:</p>
<p align="left"><font size="1"><code>0:000&gt; dq 0000000b`970fe260 L1<br />
0000000b`970fe260  <font color="red">cccccccc`cccccccc</font></code></font></p>
<p align="left">However, in the disassembly, we see the following sequence of instructions to initialize the variable:</p>
<p align="left"><font size="1"><code>00007ff7`d061afdc f9533f69 ldr         x9,[x27,#0x2678]<br />
00007ff7`d061afe0 d2800028 mov         x8,#1<br />
00007ff7`d061afe4 f9000128 str         x8,[x9]</code></font></p>
<p>So, we can see that the local variable address is stored at x27+0&#215;2678:</p>
<p align="left"><font size="1"><code>0:000&gt; dp x27+0x2678 L1<br />
0000000b`970ff8d8  <font color="blue">0000000b`970fd000</font></code></font></p>
<p>and see the correct variable value:</p>
<p align="left"><font size="1"><code>0:000&gt; dpp x27+0x2678 L1<br />
0000000b`970ff8d8  0000000b`970fd000 <font color="blue">00000000`00000001</font></code></font></p>
<p align="left">This analysis pattern differs from <a href="http://www.dumpanalysis.org/blog/index.php/2014/04/26/crash-dump-analysis-patterns-part-205/">False Effective Address</a> analysis pattern in the correct value of the base register.</p>
<p align="left">- Dmitry Vostokov @ <a href="http://www.dumpanalysis.org/">DumpAnalysis.org</a> + <a href="http://www.traceanalysis.org/">TraceAnalysis.org</a> -</p>
]]></content:encoded>
			<wfw:commentRss>https://www.dumpanalysis.org/blog/index.php/2025/11/17/crash-dump-analysis-patterns-part-302/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Crash Dump Analysis Patterns (Part 26b)</title>
		<link>https://www.dumpanalysis.org/blog/index.php/2025/11/16/crash-dump-analysis-patterns-part-26b/</link>
		<comments>https://www.dumpanalysis.org/blog/index.php/2025/11/16/crash-dump-analysis-patterns-part-26b/#comments</comments>
		<pubDate>Sun, 16 Nov 2025 14:29:56 +0000</pubDate>
		<dc:creator>Dmitry Vostokov</dc:creator>
		
		<category><![CDATA[ARM64 Windows]]></category>

		<category><![CDATA[Crash Dump Analysis]]></category>

		<category><![CDATA[Crash Dump Patterns]]></category>

		<guid isPermaLink="false">https://www.dumpanalysis.org/blog/index.php/2025/11/16/crash-dump-analysis-patterns-part-26b/</guid>
		<description><![CDATA[On Windows 11 ARM64, it is possible to run x64 and x86 programs (ARM64EC and Compiled Hybrid Portable Executable, CHPE). When we capture memory dumps and examine the corresponding Stack Trace Collection, we see ARM64EC and CHPE frames. This is similar to our earlier Virtualized Process (WOW64) analysis pattern, although WinDbg can show us different [...]]]></description>
			<content:encoded><![CDATA[<p align="left">On Windows 11 ARM64, it is possible to run x64 and x86 programs (<a href="https://learn.microsoft.com/en-us/windows/arm/arm64ec">ARM64EC</a> and <a href="https://learn.microsoft.com/en-us/windows/arm/apps-on-arm-program-compat-troubleshooter">Compiled Hybrid Portable Executable, CHPE</a>). When we capture memory dumps and examine the corresponding <a href="https://www.dumpanalysis.org/blog/index.php/2007/09/14/crash-dump-analysis-patterns-part-27/">Stack Trace Collection</a>, we see ARM64EC and CHPE frames. This is similar to our earlier <a href="https://www.dumpanalysis.org/blog/index.php/2007/09/11/crash-dump-analysis-patterns-part-26/">Virtualized Process (WOW64)</a> analysis pattern, although WinDbg can show us different architecture frames at the same time. Below are 2 examples of <a href="https://www.dumpanalysis.org/blog/index.php/2009/04/14/crash-dump-analysis-patterns-part-6b/">NULL Pointer (Data)</a> analysis pattern.</p>
<p align="left"><font size="1"><code>* x64 process minidump</code></font></p>
<p align="left"><font size="1"><code>0:000&gt; ~*kL</code></font></p>
<p align="left"><font size="1"><code>.  0  Id: 8030.677c Suspend: 0 Teb: 000000e0`5d015000 Unfrozen<br />
#   Arch   Child-SP          RetAddr               Call Site<br />
00  ARM64EC 000000e0`5d2fdf30 00007ff8`02901d6c     ntdll!#NtWaitForMultipleObjects+0x14<br />
01  ARM64EC 000000e0`5d2fdf40 00007ff8`046735e0     KERNELBASE!#WaitForMultipleObjectsEx+0xfc<br />
02  ARM64EC 000000e0`5d2fe220 00007ff8`046730e0     kernel32!#WerpReportFaultInternal+0x4c0<br />
03  ARM64EC 000000e0`5d2fe390 00007ff8`0463d3e4     kernel32!#WerpReportFault+0xe0<br />
04  ARM64EC 000000e0`5d2fe3f0 00007ff8`02a047e8     kernel32!#BasepReportFault+0x24<br />
05  ARM64EC 000000e0`5d2fe410 00007ff8`0754f7c4     KERNELBASE!#UnhandledExceptionFilter+0x308<br />
06  ARM64EC 000000e0`5d2fe500 00007ff8`07547148     ntdll!RtlUserThreadStart$filt$0+0x64<br />
07  ARM64EC 000000e0`5d2fe510 00007ff8`0749a304     ntdll!#__C_ExecuteExceptionFilter+0x38<br />
08  ARM64EC 000000e0`5d2fe570 00007ff8`07547068     ntdll!#__C_specific_handler+0xf4<br />
09  ARM64EC 000000e0`5d2fe5f0 00007ff8`07440820     ntdll!#RtlpExecuteHandlerForException+0x28<br />
0a  ARM64EC 000000e0`5d2fe610 00007ff8`07546e50     ntdll!#RtlDispatchException+0x298<br />
0b  ARM64EC 000000e0`5d2fed90 00007ff7`128d1ccc     ntdll!KiUserExceptionDispatcher_DetourReturn+0x10<br />
0c    AMD64 000000e0`5d2ff8e0 00007ff7`128d2ac9     pointers_c!main+0x41c<br />
0d    AMD64 000000e0`5d2ffdb0 00007ff7`128d2972     pointers_c!invoke_main+0x39<br />
0e    AMD64 000000e0`5d2ffe00 00007ff7`128d282e     pointers_c!__scrt_common_main_seh+0x132<br />
0f    AMD64 000000e0`5d2ffe70 00007ff7`128d2b5e     pointers_c!__scrt_common_main+0xe<br />
10    AMD64 000000e0`5d2ffea0 00007ff8`046917ac     pointers_c!mainCRTStartup+0xe<br />
11  ARM64EC 000000e0`5d2ffed0 00007ff8`046115e8     kernel32!$iexit_thunk$cdecl$i8$i8+0x1c<br />
12  ARM64EC 000000e0`5d2fff00 00007ff8`0748c120     kernel32!#BaseThreadInitThunk+0x48<br />
13  ARM64EC 000000e0`5d2fff10 00000000`00000000     ntdll!#RtlUserThreadStart+0x70</code></font></p>
<p align="left"><font size="1"><code>   1  Id: 8030.7a64 Suspend: 0 Teb: 000000e0`5d017000 Unfrozen<br />
#   Arch   Child-SP          RetAddr               Call Site<br />
00  ARM64EC 000000e0`5d3ff820 00007ff8`07470084     ntdll!#NtWaitForWorkViaWorkerFactory+0x14<br />
01  ARM64EC 000000e0`5d3ff830 00007ff8`046115e8     ntdll!#TppWorkerThread+0x5a4<br />
02  ARM64EC 000000e0`5d3ffaf0 00007ff8`0748c120     kernel32!#BaseThreadInitThunk+0x48<br />
03  ARM64EC 000000e0`5d3ffb00 00000000`00000000     ntdll!#RtlUserThreadStart+0x70</code></font></p>
<p align="left"><font size="1"><code>   2  Id: 8030.119c Suspend: 0 Teb: 000000e0`5d019000 Unfrozen<br />
#   Arch   Child-SP          RetAddr               Call Site<br />
00  ARM64EC 000000e0`5d4ff980 00007ff8`07470084     ntdll!#NtWaitForWorkViaWorkerFactory+0x14<br />
01  ARM64EC 000000e0`5d4ff990 00007ff8`046115e8     ntdll!#TppWorkerThread+0x5a4<br />
02  ARM64EC 000000e0`5d4ffc50 00007ff8`0748c120     kernel32!#BaseThreadInitThunk+0x48<br />
03  ARM64EC 000000e0`5d4ffc60 00000000`00000000     ntdll!#RtlUserThreadStart+0x70</code></font></p>
<p align="left"><font size="1"><code>   3  Id: 8030.70f0 Suspend: 0 Teb: 000000e0`5d01b000 Unfrozen<br />
#   Arch   Child-SP          RetAddr               Call Site<br />
00  ARM64EC 000000e0`5d5ff810 00007ff8`07470084     ntdll!#NtWaitForWorkViaWorkerFactory+0x14<br />
01  ARM64EC 000000e0`5d5ff820 00007ff8`046115e8     ntdll!#TppWorkerThread+0x5a4<br />
02  ARM64EC 000000e0`5d5ffae0 00007ff8`0748c120     kernel32!#BaseThreadInitThunk+0x48<br />
03  ARM64EC 000000e0`5d5ffaf0 00000000`00000000     ntdll!#RtlUserThreadStart+0x70</code></font></p>
<p align="left"><font size="1"><code>   4  Id: 8030.4720 Suspend: 0 Teb: 000000e0`5d01d000 Unfrozen<br />
#   Arch   Child-SP          RetAddr               Call Site<br />
00  ARM64EC 000000e0`5d6ff740 00007ff8`0487ec00     ntdll!#NtWaitForSingleObject+0x14<br />
01  ARM64EC 000000e0`5d6ff750 00007ff8`0487e2b0     xtajit64!BeginSimulation+0x12eb0<br />
02  ARM64EC 000000e0`5d6ff7a0 00007ff8`0748c0f0     xtajit64!BeginSimulation+0x12560<br />
03  ARM64EC 000000e0`5d6ff7d0 00000000`00000000     ntdll!#RtlUserThreadStart+0x40</code></font></p>
<p align="left"><font size="1"><code>0:000&gt; .frame /c 4<br />
04 000000e0`5d2fe3f0 00007ff8`02a047e8     kernel32!#BasepReportFault+0x24<br />
x0=0000000000000003   x1=000000e05d2fe2e0   x2=0000000000000001   x3=0000000000000000<br />
x4=0000000000000000   x5=0000000000000000   x6=0000000000000000   x7=0000000000000000<br />
x8=000000000000012c   x9=0000000000000000  x10=0000000000000000  x11=0000000000000000<br />
x12=0000000000000000  x13=0000000000000000  x14=0000000000000000  x15=0000000000000000<br />
x16=0000bbd3fe198401  x17=0000bbd3fe198401  x18=0000000000000000  x19=000000e05d2fe5a0<br />
x20=0000000000000000  x21=000000e05d2fe5a0  x22=00007ff8045a0000  x23=0000000000000000<br />
x24=0000000000000000  x25=0000000000000000  x26=000000e05d2fe410  x27=0000000000000001<br />
x28=0000000000000000   fp=000000e05d2fe3f0   lr=00007ff80463d3e4   sp=000000e05d2fe3f0<br />
pc=00007ff80463d3e4  psr=60000000 -ZC- EL0<br />
kernel32!#BasepReportFault+0x24:<br />
00007ff8`0463d3e4 14000002 b           kernel32!#BasepReportFault+0x2c (00007ff8`0463d3ec)</code></font></p>
<p align="left"><font size="1"><code>0:000:ARM64EC&gt; .frame /c c<br />
0c 000000e0`5d2ff8e0 00007ff7`128d2ac9     pointers_c!main+0x41c [C:\ACPPWD\pointers_c\pointers_c.c @ 133]<br />
rax=0000000000000004 rbx=0000000000000000 rcx=9ff2ebf5ac870000<br />
rdx=00007ff7128dabc0 rsi=0000000000000000 rdi=000000e05d2ffc18<br />
rip=00007ff7128d1ccc rsp=000000e05d2ff8e0 rbp=000000e05d2ff930<br />
r8=00000000fffffffe  r9=0000000000000000 r10=0000000000000001<br />
r11=0000000000000000 r12=0000000000000000 r13=0000000000000000<br />
r14=0000000000000000 r15=0000000000000000<br />
iopl=3         nv up ei pl zr na pe nc<br />
cs=0033  ss=002b  ds=002b  es=002b  fs=0053  gs=002b             efl=00003240<br />
pointers_c!main+0x41c:<br />
00007ff7`128d1ccc c70000000000    mov     dword ptr [rax],0 ds:00000000`00000004=????????</code></font></p>
<p align="left"><font size="1"><code>0:000&gt; .cxr<br />
Resetting default scope</code></font></p>
<p align="left"><font size="1"><code>0:000:ARM64EC&gt;</code></font></p>
<p align="left"><font size="1"><code>* x86 process full dump</code></font></p>
<p align="left"><font size="1"><code>0:000&gt; ~*kL</code></font></p>
<p align="left"><font size="1"><code>.  0  Id: 1a68.8a54 Suspend: 0 Teb: 0295d000 Unfrozen<br />
#   Arch   ChildEBP RetAddr<br />
WARNING: Frame IP not in any known module. Following frames may be wrong.<br />
00      x86 02afe454 779dd5dc     0x2730002<br />
01      x86 02afe458 75eb2f10     ntdll!NtWaitForMultipleObjects+0xc<br />
02     CHPE 02afe460 75eb2f10     KERNELBASE!$push_thunk$stdcall$u$uuuuu+0x60<br />
03     CHPE 02afe4e0 75d30840     KERNELBASE!#WaitForMultipleObjectsEx+0x194<br />
04     CHPE 02afe680 7712bc70     KERNELBASE!#WaitForMultipleObjects+0x20<br />
05     CHPE 02afe690 7712b690     kernel32!#WerpReportFaultInternal+0x598<br />
06     CHPE 02afe790 770e7fe4     kernel32!#WerpReportFault+0x118<br />
07     CHPE 02afe800 75e90da8     kernel32!#BasepReportFault+0x24<br />
08     CHPE 02afe820 779141b4     KERNELBASE!#UnhandledExceptionFilter+0x378<br />
09     CHPE 02afe8f0 77910ef8     ntdll!strrchr+0x1eb4<br />
0a     CHPE 02afe910 778cf388     ntdll!#__C_ExecuteExceptionFilter+0x38<br />
0b     CHPE 02afe970 77861554     ntdll!#__C_specific_handler+0xf8<br />
0c     CHPE 02afe9e0 779b7154     ntdll!RtlpExecuteHandlerForExceptionCHPE+0x14<br />
0d      x86 02afeee0 779b7154     ntdll!RtlDispatchExceptionCHPE+0x2de<br />
0e      x86 02aff2bc 779e08d2     ntdll!RtlpProcessPushThunkForException+0x7b<br />
0f      x86 <font color="blue">02aff354</font> 779e0e5f     ntdll!RtlDispatchException+0&#215;1ee<br />
10      x86 02aff360 02aff36c     ntdll!KiUserExceptionDispatcher+0xf<br />
11      x86 02aff88c 00712a03     0&#215;2aff36c<br />
12      x86 02aff8ac 0071284a     pointers_c!invoke_main+0&#215;33<br />
13      x86 02aff908 007126dd     pointers_c!__scrt_common_main_seh+0&#215;15a<br />
14      x86 02aff910 00712a88     pointers_c!__scrt_common_main+0xd<br />
15      x86 02aff918 771487a8     pointers_c!mainCRTStartup+0&#215;8<br />
16     CHPE 02aff920 771487a8     kernel32!$push_thunk$cdecl$u$u+0&#215;58<br />
17     CHPE 02aff990 778bfc8c     kernel32!BaseThreadInitThunk+0&#215;2c<br />
18     CHPE 02aff9a0 778bfbe8     ntdll!#__RtlUserThreadStart+0&#215;3c<br />
19     CHPE 02aff9f0 7799988c     ntdll!#_RtlUserThreadStart+0&#215;28</code></font></p>
<p align="left"><font size="1"><code>   1  Id: 1a68.8194 Suspend: 0 Teb: 02961000 Unfrozen<br />
#   Arch   ChildEBP RetAddr<br />
WARNING: Frame IP not in any known module. Following frames may be wrong.<br />
00      x86 086ff5a4 779dee8c     0x2730002<br />
01      x86 086ff5a8 779ab648     ntdll!NtWaitForWorkViaWorkerFactory+0xc<br />
02     CHPE 086ff5b0 779ab648     ntdll!#NtWaitForWorkViaWorkerFactory$push_thunk+0x68<br />
03     CHPE 086ff630 7709e81c     ntdll!#TppWorkerThread+0x238<br />
04     CHPE 086ff810 778bfc8c     kernel32!BaseThreadInitThunk+0x2c<br />
05     CHPE 086ff820 778bfbe8     ntdll!#__RtlUserThreadStart+0x3c<br />
06     CHPE 086ff870 7799988c     ntdll!#_RtlUserThreadStart+0x28</code></font></p>
<p align="left"><font size="1"><code>   2  Id: 1a68.499c Suspend: 0 Teb: 02965000 Unfrozen<br />
#   Arch   ChildEBP RetAddr<br />
WARNING: Frame IP not in any known module. Following frames may be wrong.<br />
00      x86 087ffcc4 779dee8c     0x2730002<br />
01      x86 087ffcc8 779ab648     ntdll!NtWaitForWorkViaWorkerFactory+0xc<br />
02     CHPE 087ffcd0 779ab648     ntdll!#NtWaitForWorkViaWorkerFactory$push_thunk+0x68<br />
03     CHPE 087ffd50 7709e81c     ntdll!#TppWorkerThread+0x238<br />
04     CHPE 087fff30 778bfc8c     kernel32!BaseThreadInitThunk+0x2c<br />
05     CHPE 087fff40 778bfbe8     ntdll!#__RtlUserThreadStart+0x3c<br />
06     CHPE 087fff90 7799988c     ntdll!#_RtlUserThreadStart+0x28</code></font></p>
<p align="left"><font size="1"><code>   3  Id: 1a68.63f4 Suspend: 0 Teb: 02969000 Unfrozen<br />
#   Arch   ChildEBP RetAddr<br />
WARNING: Frame IP not in any known module. Following frames may be wrong.<br />
00      x86 08b5f854 779dee8c     0x2730002<br />
01      x86 08b5f858 779ab648     ntdll!NtWaitForWorkViaWorkerFactory+0xc<br />
02     CHPE 08b5f860 779ab648     ntdll!#NtWaitForWorkViaWorkerFactory$push_thunk+0x68<br />
03     CHPE 08b5f8e0 7709e81c     ntdll!#TppWorkerThread+0x238<br />
04     CHPE 08b5fac0 778bfc8c     kernel32!BaseThreadInitThunk+0x2c<br />
05     CHPE 08b5fad0 778bfbe8     ntdll!#__RtlUserThreadStart+0x3c<br />
06     CHPE 08b5fb20 7799988c     ntdll!#_RtlUserThreadStart+0x28</code></font></p>
<p align="left"><font size="1"><code>0:000&gt; r<br />
eax=001d005b ebx=00000180 ecx=00000003 edx=779ea670 esi=00000000 edi=00000003<br />
eip=02730002 esp=02afe458 ebp=02afe480 iopl=0         nv up ei ng nz ac po cy<br />
cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0023             efl=00000293<br />
02730002 c3              ret</code></font></p>
<p align="left"><font size="1"><code>0:000&gt; .frame /c 7<br />
07 02afe800 75e90da8     kernel32!#BasepReportFault+0x24<br />
x0=0000000000000000   x1=0000000000000000   x2=0000000000000000   x3=0000000000000000<br />
x4=0000000000000000   x5=0000000000000000   x6=0000000000000000   x7=0000000000000000<br />
x8=0000000000000000   x9=0000000000000000  x10=0000000000000000  x11=0000000000000000<br />
x12=0000000000000000  x13=0000000000000000  x14=0000000000000000  x15=0000000000000000<br />
x16=0000000000000000  x17=0000000000000000  x18=0000000000000000  x19=0000000002afe990<br />
x20=0000000002afe990  x21=0000000077090000  x22=0000000000000004  x23=0000000000000000<br />
x24=0000000000000001  x25=0000000075f1e000  x26=0000000000000000  x27=0000000002afe830<br />
x28=0000000002affa38   fp=0000000002afe800   lr=00000000770e7fe4   sp=0000000002afe800<br />
pc=00000000770e7fe4  psr=00000000 ---- EL0<br />
kernel32!#BasepReportFault+0x24:<br />
770e7fe4 2a0003e0 mov         w0,w0</code></font></p>
<p align="left"><font size="1"><code>0:000:CHPE&gt; .cxr<br />
Resetting default scope</code></font></p>
<p align="left"><font size="1"><code>0:000&gt; dps <font color="blue">02aff354</font><br />
02aff354  02aff88c<br />
02aff358  779e0e5f ntdll!KiUserExceptionDispatcher+0xf<br />
02aff35c  02aff36c<br />
02aff360  <font color="red">02aff3bc</font><br />
02aff364  02aff36c<br />
02aff368  02aff3bc<br />
02aff36c  c0000005<br />
02aff370  00000000<br />
02aff374  00000000<br />
02aff378  00711c6a pointers_c!main+0&#215;3da<br />
02aff37c  00000002<br />
02aff380  00000001<br />
02aff384  00000004<br />
02aff388  00000000<br />
02aff38c  00000000<br />
02aff390  00000000<br />
02aff394  00000000<br />
02aff398  00000000<br />
02aff39c  00000000<br />
02aff3a0  00000000<br />
02aff3a4  00000000<br />
02aff3a8  00000000<br />
02aff3ac  00000000<br />
02aff3b0  00000000<br />
02aff3b4  00000000<br />
02aff3b8  00000000<br />
02aff3bc  0001003f<br />
02aff3c0  00000000<br />
02aff3c4  00000000<br />
02aff3c8  00000000<br />
02aff3cc  00000000<br />
02aff3d0  ffff0ff0</code></font></p>
<p align="left"><font size="1"><code>0:000&gt; .cxr <font color="red">02aff3bc</font><br />
eax=00000004 ebx=0295a000 ecx=02aff4a0 edx=00000000 esi=02aff6a8 edi=02aff88c<br />
eip=00711c6a esp=02aff6a8 ebp=02aff88c iopl=0         nv up ei pl nz ac po nc<br />
cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0023             efl=00010212<br />
pointers_c!main+0&#215;3da:<br />
00711c6a c70000000000    mov     dword ptr [eax],0    ds:0023:00000004=????????</code></font></p>
<p align="left"><font size="1"><code>0:000&gt; kL<br />
*** Stack trace for last set context - .thread/.cxr resets it<br />
#   Arch   ChildEBP RetAddr<br />
00      x86 02aff88c 00712a03     pointers_c!main+0x3da<br />
01      x86 02aff8ac 0071284a     pointers_c!invoke_main+0x33<br />
02      x86 02aff908 007126dd     pointers_c!__scrt_common_main_seh+0x15a<br />
03      x86 02aff910 00712a88     pointers_c!__scrt_common_main+0xd<br />
04      x86 02aff918 771487a8     pointers_c!mainCRTStartup+0x8<br />
05     CHPE 02aff920 771487a8     kernel32!$push_thunk$cdecl$u$u+0x58<br />
06     CHPE 02aff990 778bfc8c     kernel32!BaseThreadInitThunk+0x2c<br />
07     CHPE 02aff9a0 778bfbe8     ntdll!#__RtlUserThreadStart+0x3c<br />
08     CHPE 02aff9f0 7799988c     ntdll!#_RtlUserThreadStart+0x28</code></font></p>
<p align="left">- Dmitry Vostokov @ <a href="http://www.dumpanalysis.org/">DumpAnalysis.org</a> + <a href="http://www.traceanalysis.org/">TraceAnalysis.org</a> -</p>
]]></content:encoded>
			<wfw:commentRss>https://www.dumpanalysis.org/blog/index.php/2025/11/16/crash-dump-analysis-patterns-part-26b/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Trace Analysis Patterns (Part 255)</title>
		<link>https://www.dumpanalysis.org/blog/index.php/2025/11/01/trace-analysis-patterns-part-255/</link>
		<comments>https://www.dumpanalysis.org/blog/index.php/2025/11/01/trace-analysis-patterns-part-255/#comments</comments>
		<pubDate>Sat, 01 Nov 2025 21:09:11 +0000</pubDate>
		<dc:creator>Dmitry Vostokov</dc:creator>
		
		<category><![CDATA[Log Analysis]]></category>

		<category><![CDATA[Software Trace Analysis]]></category>

		<category><![CDATA[Trace Analysis Patterns]]></category>

		<category><![CDATA[Trace Engineering]]></category>

		<guid isPermaLink="false">https://www.dumpanalysis.org/blog/index.php/2025/11/01/trace-analysis-patterns-part-255/</guid>
		<description><![CDATA[We write software based on requirements and then see its execution. The same analogy can be applied to Declarative Traces, which are &#8220;executed.&#8221; Trace Plans serve the role of tracing and logging requirements. The following diagram illustrates trace engineering and the lifecycle of tracing and logging:

We look at a resulting trace or log and relate it [...]]]></description>
			<content:encoded><![CDATA[<p align="left">We write software based on requirements and then see its execution. The same analogy can be applied to <a href="https://www.dumpanalysis.org/blog/index.php/2016/04/27/trace-analysis-patterns-part-123/">Declarative Traces</a>, which are &#8220;executed.&#8221; <strong>Trace Plans</strong> serve the role of tracing and logging requirements. The following diagram illustrates trace engineering and the lifecycle of tracing and logging:</p>
<p><img src="https://www.dumpanalysis.org/blog/files/TracePlan-450.png" /></p>
<p align="left">We look at a resulting trace or log and relate it to its <strong>Trace Plan</strong> to find anomalies and problems not only in software execution but also in traces and logs themselves and improve tracing source code.</p>
<p align="left">- Dmitry Vostokov @ <a href="http://www.dumpanalysis.org/">DumpAnalysis.org</a> + <a href="http://www.traceanalysis.org/">TraceAnalysis.org</a> -</p>
]]></content:encoded>
			<wfw:commentRss>https://www.dumpanalysis.org/blog/index.php/2025/11/01/trace-analysis-patterns-part-255/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Trace Analysis Patterns (Part 254)</title>
		<link>https://www.dumpanalysis.org/blog/index.php/2025/10/26/trace-analysis-patterns-part-254/</link>
		<comments>https://www.dumpanalysis.org/blog/index.php/2025/10/26/trace-analysis-patterns-part-254/#comments</comments>
		<pubDate>Sun, 26 Oct 2025 21:09:21 +0000</pubDate>
		<dc:creator>Dmitry Vostokov</dc:creator>
		
		<category><![CDATA[Log Analysis]]></category>

		<category><![CDATA[Software Trace Analysis]]></category>

		<category><![CDATA[Trace Analysis Patterns]]></category>

		<guid isPermaLink="false">https://www.dumpanalysis.org/blog/index.php/2025/10/26/trace-analysis-patterns-part-254/</guid>
		<description><![CDATA[When we get traces and logs, we are interested in Trace Context: an issue description, how its trace was collected, overall system information, related Adjoint Spaces, Trace Summary, and previous traces and logs and their analyses. This contextual information can be organized as a checklist to ensure situational awareness, diagnostic quality, and reduce the number [...]]]></description>
			<content:encoded><![CDATA[<p align="left">When we get traces and logs, we are interested in <strong>Trace Context</strong>: an issue description, how its trace was collected, overall system information, related <a href="https://www.dumpanalysis.org/blog/index.php/2015/01/31/trace-analysis-patterns-part-100/">Adjoint Spaces</a>, <a href="https://www.dumpanalysis.org/blog/index.php/2020/07/14/trace-analysis-patterns-part-186/">Trace Summary</a>, and previous traces and logs and their analyses. This contextual information can be organized as a checklist to ensure <a href="https://www.dumpanalysis.org/situational-awareness">situational awareness</a>, diagnostic quality, and reduce the number of information request roundtrips.</p>
<p align="left">- Dmitry Vostokov @ <a href="http://www.dumpanalysis.org/">DumpAnalysis.org</a> + <a href="http://www.traceanalysis.org/">TraceAnalysis.org</a> -</p>
]]></content:encoded>
			<wfw:commentRss>https://www.dumpanalysis.org/blog/index.php/2025/10/26/trace-analysis-patterns-part-254/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Crash Dump Analysis Patterns (Part 301)</title>
		<link>https://www.dumpanalysis.org/blog/index.php/2025/10/21/crash-dump-analysis-patterns-part-301/</link>
		<comments>https://www.dumpanalysis.org/blog/index.php/2025/10/21/crash-dump-analysis-patterns-part-301/#comments</comments>
		<pubDate>Tue, 21 Oct 2025 17:49:12 +0000</pubDate>
		<dc:creator>Dmitry Vostokov</dc:creator>
		
		<category><![CDATA[Core Dump Analysis]]></category>

		<category><![CDATA[Crash Dump Analysis]]></category>

		<category><![CDATA[Crash Dump Patterns]]></category>

		<guid isPermaLink="false">https://www.dumpanalysis.org/blog/index.php/2025/10/21/crash-dump-analysis-patterns-part-301/</guid>
		<description><![CDATA[When we get memory dumps, we are interested in Dump Context: an issue description, how its memory dump was collected, overall system information, related Paratext, and previous memory dumps and their analyses. This contextual information can be organized as a checklist to ensure situational awareness, diagnostic quality, and reduce the number of information request roundtrips.
- [...]]]></description>
			<content:encoded><![CDATA[<p align="left">When we get memory dumps, we are interested in <strong>Dump Context</strong>: an issue description, how its memory dump was collected, overall system information, related <a href="https://www.dumpanalysis.org/blog/index.php/2012/07/28/crash-dump-analysis-patterns-part-180-mac-os-x/">Paratext</a>, and previous memory dumps and their analyses. This contextual information can be organized as a checklist to ensure <a href="https://www.dumpanalysis.org/situational-awareness">situational awareness</a>, diagnostic quality, and reduce the number of information request roundtrips.</p>
<p align="left">- Dmitry Vostokov @ <a href="http://www.dumpanalysis.org/">DumpAnalysis.org</a> + <a href="http://www.traceanalysis.org/">TraceAnalysis.org</a> -</p>
]]></content:encoded>
			<wfw:commentRss>https://www.dumpanalysis.org/blog/index.php/2025/10/21/crash-dump-analysis-patterns-part-301/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
