From 2f4f925b4bb0f887642c1d975c4ec429cf6857db Mon Sep 17 00:00:00 2001 From: "SND\\kernelnet_cp" Date: Tue, 7 Jun 2011 16:39:05 +0000 Subject: [PATCH] [pykd] added : typedVar::data method ( Return raw string object with data stream ) git-svn-id: https://pykd.svn.codeplex.com/svn@66398 9b283d60-5439-405e-af05-b73fd8c4d996 --- pykd/dbgext.cpp | 20 ++++++++++++++++++-- pykd/dbgtype.cpp | 15 +++++++++++++++ pykd/dbgtype.h | 4 +++- 3 files changed, 36 insertions(+), 3 deletions(-) diff --git a/pykd/dbgext.cpp b/pykd/dbgext.cpp index 4b60e86..35d444d 100644 --- a/pykd/dbgext.cpp +++ b/pykd/dbgext.cpp @@ -21,7 +21,6 @@ #include "dbgdump.h" #include "dbgexcept.h" #include "dbgeventcb.h" -#include "dbgcallback.h" #include "dbgpath.h" #include "dbgprocess.h" #include "dbgsynsym.h" @@ -253,8 +252,10 @@ BOOST_PYTHON_MODULE( pykd ) "constructor" ) ) .def("getAddress", &TypedVar::getAddress, "Return virtual address" ) - .def("sizeof", &TypedVar::getSize, + .def("sizeof", &TypedVar::getSize, "Return size of a variable in the target memory" ) + .def("data", &TypedVar::data, + "Return raw string object with data stream" ) .def("__getattr__", &TypedVar::getFieldWrap, "Return field of structure as a object attribute" ) .def("__str__", &TypedVar::print, @@ -827,6 +828,21 @@ pycmd( PDEBUG_CLIENT4 client, PCSTR args ) char str[100]; ULONG inputSize; bool stopInput = false; + + boost::python::import( "pykd" ); + + boost::python::object main = boost::python::import("__main__"); + + boost::python::object global(main.attr("__dict__")); + + // перенаправление стандартных потоков ВВ + boost::python::object sys = boost::python::import("sys"); + + dbgOut dout; + sys.attr("stdout") = boost::python::object( dout ); + + dbgIn din; + sys.attr("stdin") = boost::python::object( din ); do { diff --git a/pykd/dbgtype.cpp b/pykd/dbgtype.cpp index 4e091d5..f965854 100644 --- a/pykd/dbgtype.cpp +++ b/pykd/dbgtype.cpp @@ -867,6 +867,21 @@ TypedVar::getField( boost::python::object &pyobj, const std::string &fieldName ///////////////////////////////////////////////////////////////////////////////////// +std::string +TypedVar::data() +{ + if ( m_buffer.size() == 0 ) + { + m_buffer.resize( (size_t)m_typeInfo.fullSize() ); + + loadMemory( m_targetOffset, (PVOID)&m_buffer[0], (ULONG)m_buffer.size() ); + } + + return std::string( &m_buffer[0], m_buffer.size() ); +} + +///////////////////////////////////////////////////////////////////////////////////// + std::string TypedVar::print() { diff --git a/pykd/dbgtype.h b/pykd/dbgtype.h index d1e9fe5..097004e 100644 --- a/pykd/dbgtype.h +++ b/pykd/dbgtype.h @@ -216,7 +216,7 @@ public: getAddress() const { return m_targetOffset; } - + ULONG getSize() const { return m_typeInfo.fullSize(); @@ -233,6 +233,8 @@ public: return m_targetOffset; } + std::string data(); + std::string print(); private: