diff --git a/pykd/disasm.cpp b/pykd/disasm.cpp index 280e632..2326f75 100644 --- a/pykd/disasm.cpp +++ b/pykd/disasm.cpp @@ -10,6 +10,7 @@ namespace pykd { ///////////////////////////////////////////////////////////////////////////////// Disasm::Disasm( ULONG64 offset ) + : m_ea(0) { m_beginOffset = addr64(offset); @@ -27,7 +28,7 @@ void Disasm::doDisasm() { ULONG64 endOffset = 0; - disasmDisassembly( m_currentOffset, m_disasm, endOffset ); + disasmDisassembly( m_currentOffset, m_disasm, endOffset, m_ea ); m_length = (ULONG)(endOffset - m_currentOffset); } diff --git a/pykd/disasmengine.h b/pykd/disasmengine.h index 2728b7c..9180bab 100644 --- a/pykd/disasmengine.h +++ b/pykd/disasmengine.h @@ -3,6 +3,6 @@ namespace pykd { void disasmAssemblay( ULONG64 offset, const std::string &instruction, ULONG64 &nextOffset ); -void disasmDisassembly( ULONG64 offset, std::string &instruction, ULONG64 &nextOffset ); +void disasmDisassembly( ULONG64 offset, std::string &instruction, ULONG64 &nextOffset, ULONG64 &ea ); } // end pykd namespace \ No newline at end of file diff --git a/pykd/win/dbgasm.cpp b/pykd/win/dbgasm.cpp index 6410141..f5c3195 100644 --- a/pykd/win/dbgasm.cpp +++ b/pykd/win/dbgasm.cpp @@ -19,7 +19,7 @@ void disasmAssemblay( ULONG64 offset, const std::string &instruction, ULONG64 &n /////////////////////////////////////////////////////////////////////////////// -void disasmDisassembly( ULONG64 offset, std::string &instruction, ULONG64 &nextOffset ) +void disasmDisassembly( ULONG64 offset, std::string &instruction, ULONG64 &nextOffset, ULONG64 &ea ) { PyThread_StateRestore pyThreadRestore( g_dbgEng->pystate ); @@ -40,6 +40,10 @@ void disasmDisassembly( ULONG64 offset, std::string &instruction, ULONG64 &nextO if ( FAILED( hres ) ) throw DbgException( "IDebugControl::Disassemble failed" ); + hres = g_dbgEng->control->GetDisassembleEffectiveOffset(&ea); + if ( FAILED( hres ) ) + ea = 0; + instruction = std::string( buffer, disasmSize - 2); }