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; }