Crash Dump Analysis Patterns (Part 127d)

Here we add yet another Technology-Specific Subtrace pattern for COM client calls (as compared to COM interface invocation for servers). We recently got a complete memory dump where we had to find the destination server process, and we used the old technique described in the article In Search of Lost CID. We reprint the 32-bit stack subtrace trace here:

[...]
00faf828 7778c38b ole32!CRpcChannelBuffer::SwitchAptAndDispatchCall+0x112
00faf908 776c0565 ole32!CRpcChannelBuffer::SendReceive2+0xd3
00faf974 776c04fa ole32!CAptRpcChnl::SendReceive+0xab
00faf9c8 77ce247f ole32!CCtxComChnl::SendReceive+0×1a9
00faf9e4 77ce252f RPCRT4!NdrProxySendReceive+0×43
00fafdcc 77ce25a6 RPCRT4!NdrClientCall2+0×206
[...]

Here’s also an x64 fragment from Semantic Structures (PID.TID) pattern:

[...]
00000000`018ce450 000007fe`ffee041b ole32!CRpcChannelBuffer::SwitchAptAndDispatchCall+0xa3
00000000`018ce4f0 000007fe`ffd819c6 ole32!CRpcChannelBuffer::SendReceive2+0×11b
00000000`018ce6b0 000007fe`ffd81928 ole32!CAptRpcChnl::SendReceive+0×52
00000000`018ce780 000007fe`ffedfcf5 ole32!CCtxComChnl::SendReceive+0×68
00000000`018ce830 000007fe`ff56ba3b ole32!NdrExtpProxySendReceive+0×45
00000000`018ce860 000007fe`ffee02d0 RPCRT4!NdrpClientCall3+0×2e2
[...]

If we have the call over ALPC it is easy to find the server process and thread (Wait Chain). In case of a modal loop we can use raw stack analysis technique mentioned above (see also this case study).

Other subtrace examples can be found in pattern examples for High Contention (.NET CLR monitors), Wait Chain (RTL_RESOURCE), and in this case study.

- Dmitry Vostokov @ DumpAnalysis.org + TraceAnalysis.org -

One Response to “Crash Dump Analysis Patterns (Part 127d)”

  1. Dmitry Vostokov Says:

    Another recent example showing combase instead of ole32:

    0:003> kc
    # Call Site
    00 ntdll!NtAlpcSendWaitReceivePort
    01 rpcrt4!LRPC_BASE_CCALL::SendReceive
    02 rpcrt4!NdrpSendReceive
    03 rpcrt4!NdrpClientCall2
    04 rpcrt4!NdrClientCall2
    05 combase!BulkUpdateOIDs
    06 combase!CRpcResolver::BulkUpdateOIDs
    07 combase!CROIDTable::ClientBulkUpdateOIDWithPingServer
    08 combase!CROIDTable::ForceImmediateBulkUpdateWithPingServerForAdds
    09 combase!CStdMarshal::ConnectCliIPIDEntry
    0a combase!CStdMarshal::MakeCliIPIDEntry
    0b combase!CStdMarshal::UnmarshalIPID
    0c combase!CStdMarshal::UnmarshalObjRef
    0d combase!UnmarshalSwitch
    0e combase!UnmarshalObjRef
    0f combase!CoUnmarshalInterface
    10 combase!Ndr64ExtInterfacePointerUnmarshall
    11 rpcrt4!Ndr64TopLevelPointerUnmarshall
    12 rpcrt4!Ndr64TopLevelPointerUnmarshall
    13 rpcrt4!Ndr64pClientUnMarshal
    14 rpcrt4!NdrpClientCall3
    15 combase!ObjectStublessClient
    16 combase!ObjectStubless
    17 netprofm!CPubINetwork::GetNetworkConnections
    18 winspool!IsNetworkPPP
    19 winspool!GetCurrentNetworkIdInternal
    1a winspool!GetCurrentNetworkId
    1b winspool!InternalGetDefaultPrinter
    1c winspool!GetDefaultPrinterW
    1d comdlg32!PrintBuildDevNames
    1e comdlg32!PrintDlgX
    1f comdlg32!PrintDlgW
    20 mfc42u!CWinApp::UpdatePrinterSelection
    21 mfc42u!CWinApp::GetPrinterDeviceDefaults
    22 wordpad!CWordPadApp::CreateDevNames
    23 wordpad!CWordPadApp::DoDeferredInitialization
    24 mfc42u!_AfxThreadEntry
    25 msvcrt!_callthreadstartex
    26 msvcrt!_threadstartex
    27 kernel32!BaseThreadInitThunk
    28 ntdll!RtlUserThreadStart

Leave a Reply

You must be logged in to post a comment.