From a59d64e04cc17931dcef8ed39564b59e8b4ce1d0 Mon Sep 17 00:00:00 2001 From: "SND\\EreTIk_cp" Date: Fri, 11 Jan 2013 12:52:19 +0000 Subject: [PATCH] [0.2.x] ~restored: disassemble effective offset git-svn-id: https://pykd.svn.codeplex.com/svn@82240 9b283d60-5439-405e-af05-b73fd8c4d996 --- pykd/disasm.cpp | 3 ++- pykd/disasmengine.h | 2 +- pykd/win/dbgasm.cpp | 6 +++++- 3 files changed, 8 insertions(+), 3 deletions(-) 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); }