From 8603390ceb49d132a2677280ab944682c233aae9 Mon Sep 17 00:00:00 2001 From: "SND\\kernelnet_cp" Date: Wed, 30 Mar 2011 06:49:10 +0000 Subject: [PATCH] [pykd] fixed : issue 8578 ( findModule returns None for WOW64 process ) git-svn-id: https://pykd.svn.codeplex.com/svn@63267 9b283d60-5439-405e-af05-b73fd8c4d996 --- pykd/dbgmem.cpp | 33 +++++++++++++++++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/pykd/dbgmem.cpp b/pykd/dbgmem.cpp index 7d264da..61c3305 100644 --- a/pykd/dbgmem.cpp +++ b/pykd/dbgmem.cpp @@ -54,8 +54,37 @@ loadMemory( ULONG64 address, PVOID dest, ULONG length, BOOLEAN phyAddr ) ULONG64 addr64( ULONG64 addr ) { - if ( *( (ULONG*)&addr + 1 ) == 0 ) - return (ULONG64)(LONG)addr; + HRESULT hres; + + try { + + ULONG processorMode; + hres = dbgExt->control->GetActualProcessorType( &processorMode ); + if ( FAILED( hres ) ) + throw DbgException( "IDebugControl::GetEffectiveProcessorType failed" ); + + switch( processorMode ) + { + case IMAGE_FILE_MACHINE_I386: + if ( *( (ULONG*)&addr + 1 ) == 0 ) + return (ULONG64)(LONG)addr; + + case IMAGE_FILE_MACHINE_AMD64: + break; + + default: + throw DbgException( "Unknown processor type" ); + break; + } + } + catch( std::exception &e ) + { + dbgExt->control->Output( DEBUG_OUTPUT_ERROR, "pykd error: %s\n", e.what() ); + } + catch(...) + { + dbgExt->control->Output( DEBUG_OUTPUT_ERROR, "pykd unexpected error\n" ); + } return addr; }