[0.3.x] added : module.typedVar can accept python byte sequance

git-svn-id: https://pykd.svn.codeplex.com/svn@91218 9b283d60-5439-405e-af05-b73fd8c4d996
This commit is contained in:
SND\ussrhero_cp 2017-04-22 12:30:46 +00:00 committed by Mikhail I. Izmestev
parent 9cf68441ae
commit 16c796799b
2 changed files with 51 additions and 52 deletions

View File

@ -767,54 +767,54 @@ BOOST_PYTHON_MODULE( pykd )
.def("__str__", TargetThreadAdapter::print) .def("__str__", TargetThreadAdapter::print)
; ;
python::class_<kdlib::Module, kdlib::ModulePtr, python::bases<kdlib::NumBehavior>, boost::noncopyable>("module", "Class representing executable module", python::no_init) python::class_<kdlib::Module, kdlib::ModulePtr, python::bases<kdlib::NumBehavior>, boost::noncopyable>("module", "Class representing executable module", python::no_init)
.def("__init__", python::make_constructor(&ModuleAdapter::loadModuleByName)) .def("__init__", python::make_constructor(&ModuleAdapter::loadModuleByName))
.def("__init__", python::make_constructor(&ModuleAdapter::loadModuleByOffset)) .def("__init__", python::make_constructor(&ModuleAdapter::loadModuleByOffset))
.def("begin", ModuleAdapter::getBase, .def("begin", ModuleAdapter::getBase,
"Return start address of the module") "Return start address of the module")
.def("end", ModuleAdapter::getEnd, .def("end", ModuleAdapter::getEnd,
"Return end address of the module") "Return end address of the module")
.def("size", ModuleAdapter::getSize, .def("size", ModuleAdapter::getSize,
"Return size of the module") "Return size of the module")
.def("name", ModuleAdapter::getName, .def("name", ModuleAdapter::getName,
"Return name of the module") "Return name of the module")
.def("reload", ModuleAdapter::reloadSymbols, .def("reload", ModuleAdapter::reloadSymbols,
"(Re)load symbols for the module") "(Re)load symbols for the module")
.def("image", ModuleAdapter::getImageName, .def("image", ModuleAdapter::getImageName,
"Return name of the image of the module") "Return name of the image of the module")
.def("symfile", ModuleAdapter::getSymFile, .def("symfile", ModuleAdapter::getSymFile,
"Return the full path to the module's symbol information") "Return the full path to the module's symbol information")
.def("offset", ModuleAdapter::getSymbolVa, .def("offset", ModuleAdapter::getSymbolVa,
"Return offset of the symbol") "Return offset of the symbol")
.def("findSymbol", ModuleAdapter::findSymbol, Module_findSymbol(python::args("offset", "showDisplacement"), .def("findSymbol", ModuleAdapter::findSymbol, Module_findSymbol(python::args("offset", "showDisplacement"),
"Return symbol name by virtual address")) "Return symbol name by virtual address"))
.def("findSymbolAndDisp", ModuleAdapter::findSymbolAndDisp, .def("findSymbolAndDisp", ModuleAdapter::findSymbolAndDisp,
"Return tuple(symbol_name, displacement) by virtual address") "Return tuple(symbol_name, displacement) by virtual address")
.def("rva", ModuleAdapter::getSymbolRva, .def("rva", ModuleAdapter::getSymbolRva,
"Return rva of the symbol") "Return rva of the symbol")
.def("sizeof", ModuleAdapter::getSymbolSize, .def("sizeof", ModuleAdapter::getSymbolSize,
"Return a size of the type or variable") "Return a size of the type or variable")
.def("type", ModuleAdapter::getTypeByName, .def("type", ModuleAdapter::getTypeByName,
"Return typeInfo class by type name") "Return typeInfo class by type name")
.def("typedVar", ModuleAdapter::getTypedVarByAddr, .def("typedVar", ModuleAdapter::getTypedVarByAddr,
"Return a typedVar class instance") "Return a typedVar class instance")
.def("typedVar", ModuleAdapter::getTypedVarByName, .def("typedVar", ModuleAdapter::getTypedVarByName,
"Return a typedVar class instance") "Return a typedVar class instance")
.def("typedVar", ModuleAdapter::getTypedVarByTypeName, .def("typedVar", ModuleAdapter::getTypedVarByTypeName,
"Return a typedVar class instance") "Return a typedVar class instance")
.def("typedVar", ModuleAdapter::getTypedVarWithPrototype, .def("typedVar", ModuleAdapter::getTypedVarWithPrototype,
"Return a typedVar class instance") "Return a typedVar class instance")
.def("typedVarList", ModuleAdapter::getTypedVarListByTypeName, .def("typedVarList", ModuleAdapter::getTypedVarListByTypeName,
"Return a list of the typedVar class instances. Each item represents an item of the linked list in the target memory") "Return a list of the typedVar class instances. Each item represents an item of the linked list in the target memory")
.def("typedVarArray", ModuleAdapter::getTypedVarArrayByTypeName, .def("typedVarArray", ModuleAdapter::getTypedVarArrayByTypeName,
"Return a list of the typedVar class instances. Each item represents an item of the counted array in the target memory") "Return a list of the typedVar class instances. Each item represents an item of the counted array in the target memory")
.def("containingRecord", ModuleAdapter::containingRecord, .def("containingRecord", ModuleAdapter::containingRecord,
"Return instance of the typedVar class. It's value are loaded from the target memory." "Return instance of the typedVar class. It's value are loaded from the target memory."
"The start address is calculated by the same method as the standard macro CONTAINING_RECORD does") "The start address is calculated by the same method as the standard macro CONTAINING_RECORD does")
.def("enumSymbols", ModuleAdapter::enumSymbols, Module_enumSymbols(python::args("mask"), .def("enumSymbols", ModuleAdapter::enumSymbols, Module_enumSymbols(python::args("mask"),
"Return list of tuple ( symbolname, offset )")) "Return list of tuple ( symbolname, offset )"))
.def("enumTypes", ModuleAdapter::enumTypes, Module_enumTypes(python::args("mask"), .def("enumTypes", ModuleAdapter::enumTypes, Module_enumTypes(python::args("mask"),
"Return list of types name")) "Return list of types name"))
.def("checksum", ModuleAdapter::getCheckSum, .def("checksum", ModuleAdapter::getCheckSum,
"Return a image file checksum: IMAGE_OPTIONAL_HEADER.CheckSum" ) "Return a image file checksum: IMAGE_OPTIONAL_HEADER.CheckSum" )
.def("timestamp", ModuleAdapter::getTimeDataStamp, .def("timestamp", ModuleAdapter::getTimeDataStamp,
@ -920,7 +920,6 @@ BOOST_PYTHON_MODULE( pykd )
#endif #endif
; ;
python::class_<kdlib::TypedVar, kdlib::TypedVarPtr, python::bases<kdlib::NumBehavior>, boost::noncopyable >("typedVar", python::class_<kdlib::TypedVar, kdlib::TypedVarPtr, python::bases<kdlib::NumBehavior>, boost::noncopyable >("typedVar",
"Class of non-primitive type object, child class of typeClass. Data from target is copied into object instance", python::no_init ) "Class of non-primitive type object, child class of typeClass. Data from target is copied into object instance", python::no_init )
.def("__init__", python::make_constructor(pykd::getTypedVarByName) ) .def("__init__", python::make_constructor(pykd::getTypedVarByName) )

View File

@ -11,6 +11,7 @@
#include "stladaptor.h" #include "stladaptor.h"
#include "pythreadstate.h" #include "pythreadstate.h"
#include "dbgexcept.h" #include "dbgexcept.h"
#include "pytypedvar.h"
namespace pykd { namespace pykd {
@ -125,10 +126,9 @@ struct ModuleAdapter : public kdlib::Module
return module.getTypedVarByName(symbolName); return module.getTypedVarByName(symbolName);
} }
static kdlib::TypedVarPtr getTypedVarByTypeName( kdlib::Module& module, const std::wstring &typeName, kdlib::MEMOFFSET_64 offset ) static kdlib::TypedVarPtr getTypedVarByTypeName( kdlib::Module& module, const std::wstring &typeName, python::object& dataStorage )
{ {
AutoRestorePyState pystate; return getTypedVarByTypeInfo( getTypeByName(module, typeName), dataStorage);
return module.getTypedVarByTypeName(typeName, offset);
} }
static kdlib::TypedVarPtr getTypedVarWithPrototype(kdlib::Module& module, const std::wstring &symbolName, const std::wstring &prototype) static kdlib::TypedVarPtr getTypedVarWithPrototype(kdlib::Module& module, const std::wstring &symbolName, const std::wstring &prototype)