From a95075cb6fe2bac07ee9362e4faa6ddff3bbb8b5 Mon Sep 17 00:00:00 2001 From: "SND\\kernelnet_cp" Date: Tue, 27 Jul 2010 10:24:50 +0000 Subject: [PATCH] [+] routines for loading array ( loadBytes, loadWords ... ) added [+] sample added git-svn-id: https://pykd.svn.codeplex.com/svn@53051 9b283d60-5439-405e-af05-b73fd8c4d996 --- pykd/dbgext.cpp | 4 ++++ pykd/dbgmem.cpp | 3 +-- pykd/dbgmem.h | 27 +++++++++++++++++++++++++++ pykd/pykd.vcproj | 2 +- samples/ssdt.py | 32 ++++++++++++++++++++++++++++++++ 5 files changed, 65 insertions(+), 3 deletions(-) create mode 100644 samples/ssdt.py diff --git a/pykd/dbgext.cpp b/pykd/dbgext.cpp index a5c0dc8..feb555c 100644 --- a/pykd/dbgext.cpp +++ b/pykd/dbgext.cpp @@ -44,6 +44,10 @@ BOOST_PYTHON_MODULE( pykd ) boost::python::def( "getOffset", &findAddressForSymbol ); boost::python::def( "findModule", &findModule ); boost::python::def( "addr64", &addr64 ); + boost::python::def( "loadBytes", &loadArray ); + boost::python::def( "loadWords", &loadArray ); + boost::python::def( "loadDWords", &loadArray ); + boost::python::def( "loadQWords", &loadArray<__int64> ); boost::python::def( "compareMemory", &compareMemory ); boost::python::class_( "typedVarClass" ) .def("getAddress", &typedVarClass::getAddress ); diff --git a/pykd/dbgmem.cpp b/pykd/dbgmem.cpp index 375f925..39ba08b 100644 --- a/pykd/dbgmem.cpp +++ b/pykd/dbgmem.cpp @@ -87,5 +87,4 @@ compareMemory( ULONG64 addr1, ULONG64 addr2, ULONG length ) return result; } -/////////////////////////////////////////////////////////////////////////////////// - +/////////////////////////////////////////////////////////////////////////////////// \ No newline at end of file diff --git a/pykd/dbgmem.h b/pykd/dbgmem.h index be5b270..78a30bb 100644 --- a/pykd/dbgmem.h +++ b/pykd/dbgmem.h @@ -1,10 +1,37 @@ #pragma once +#include +#include + + ///////////////////////////////////////////////////////////////////////////////// bool loadMemory( ULONG64 address, PVOID dest, ULONG length ); +template +boost::python::object +loadArray( ULONG64 address, ULONG number ) +{ + T *buffer = new T[ number ]; + + if ( loadMemory( address, buffer, number*sizeof(T) ) ) + { + boost::python::dict arr; + + for ( ULONG i = 0; i < number; ++i ) + arr[i] = buffer[i]; + + delete[] buffer; + + return arr; + } + + delete[] buffer; + + return boost::python::object(); +} + bool compareMemory( ULONG64 addr1, ULONG64 addr2, ULONG length ); diff --git a/pykd/pykd.vcproj b/pykd/pykd.vcproj index 3193534..831316d 100644 --- a/pykd/pykd.vcproj +++ b/pykd/pykd.vcproj @@ -149,7 +149,7 @@ />