added : getVaState ( state of memory: commited, reserved, free)

added : getVaType ( type of memory: image, mapped, private )
added : getVaAttributes ( returns tuple of (protect, state, type) )
This commit is contained in:
ussrhero 2020-02-14 00:52:58 +03:00
parent fcf6d9927b
commit 25fbe8a6f6
4 changed files with 51 additions and 3 deletions

@ -1 +1 @@
Subproject commit e24cbc8596b86e23c0b8c6d133f21220d00ff094 Subproject commit 5be28cda0ef7473125813c250adceef4d07218a4

View File

@ -266,8 +266,32 @@ inline kdlib::MemoryProtect getVaProtect( kdlib::MEMOFFSET_64 offset )
return kdlib::getVaProtect(offset); return kdlib::getVaProtect(offset);
} }
inline kdlib::MemoryState getVaState(kdlib::MEMOFFSET_64 offset)
{
AutoRestorePyState pystate;
return kdlib::getVaState(offset);
}
inline kdlib::MemoryType getVaType(kdlib::MEMOFFSET_64 offset)
{
AutoRestorePyState pystate;
return kdlib::getVaType(offset);
}
inline python::tuple getVaAttributes(kdlib::MEMOFFSET_64 offset)
{
kdlib::MemoryProtect memProtect;
kdlib::MemoryState memState;
kdlib::MemoryType memType;
{
AutoRestorePyState pystate;
memProtect = kdlib::getVaProtect(offset);
memState = kdlib::getVaState(offset);
memType = kdlib::getVaType(offset);
}
return python::make_tuple(memProtect, memState, memType);
}
} // end namespace pykd } // end namespace pykd

View File

@ -282,6 +282,12 @@ void pykd_init()
python::def( "findMemoryRegion", pykd::findMemoryRegion, python::def( "findMemoryRegion", pykd::findMemoryRegion,
"Return address of begining valid memory region nearest to offset" ); "Return address of begining valid memory region nearest to offset" );
python::def( "getVaProtect", pykd::getVaProtect, python::def( "getVaProtect", pykd::getVaProtect,
"Return memory protect" );
python::def( "getVaType", pykd::getVaType,
"Return memory type");
python::def( "getVaState", pykd::getVaProtect,
"Return memory state");
python::def("getVaAttributes", pykd::getVaAttributes,
"Return memory attributes"); "Return memory attributes");
python::def( "ptrByte", pykd::ptrByte, python::def( "ptrByte", pykd::ptrByte,
@ -1051,7 +1057,7 @@ void pykd_init()
.def("getNumberFields", TypedVarAdapter::getElementCount, .def("getNumberFields", TypedVarAdapter::getElementCount,
"Return number of fields") "Return number of fields")
.def("field", TypedVarAdapter::getField, .def("field", TypedVarAdapter::getField,
"Return field of structure") "Return fielged of structure")
.def("field", TypedVarAdapter::getElementByIndex, .def("field", TypedVarAdapter::getElementByIndex,
"Return field of structure or array" ) "Return field of structure or array" )
.def("setField", TypedVarAdapter::setField, .def("setField", TypedVarAdapter::setField,
@ -1401,6 +1407,18 @@ void pykd_init()
.value("PageExecuteWriteCopy", kdlib::PageExecuteWriteCopy) .value("PageExecuteWriteCopy", kdlib::PageExecuteWriteCopy)
; ;
python::enum_<kdlib::MemoryState>("memoryState", "Memory state")
.value("Commit", kdlib::MemCommit)
.value("Reserve", kdlib::MemReserve)
.value("Free", kdlib::MemFree)
;
python::enum_<kdlib::MemoryType>("memoryType", "Memory type")
.value("Mapped", kdlib::MemMapped)
.value("Image", kdlib::MemImage)
.value("Private", kdlib::MemPrivate)
;
python::enum_<kdlib::ProcessDebugOptions>("ProcessDebugOptions", "Process debug option") python::enum_<kdlib::ProcessDebugOptions>("ProcessDebugOptions", "Process debug option")
.value("BreakOnStart", kdlib::ProcessBreakOnStart) .value("BreakOnStart", kdlib::ProcessBreakOnStart)
.value("BreakOnStop", kdlib::ProcessBreakOnStop) .value("BreakOnStop", kdlib::ProcessBreakOnStop)

View File

@ -183,6 +183,12 @@ class MemoryTest( unittest.TestCase ):
self.assertFalse( pykd.isValid( 0 ) ) self.assertFalse( pykd.isValid( 0 ) )
self.assertFalse( pykd.isValid( 0xDEADBEAF ) ) self.assertFalse( pykd.isValid( 0xDEADBEAF ) )
def testVaAttrib(self):
self.assertEqual( \
(pykd.memoryProtect.PageWriteCopy, pykd.memoryState.Commit, pykd.memoryType.Image), \
pykd.getVaAttributes(target.module.begin()) \
)
def testPtrList( self ): def testPtrList( self ):
lst = pykd.loadPtrList( target.module.g_listHead ) lst = pykd.loadPtrList( target.module.g_listHead )
self.assertEqual( 5, len( lst ) ) self.assertEqual( 5, len( lst ) )