问题描述
代码前的问题:
T32_ReadMemory和T32_ReadMemoryObj有什么区别?在哪种情况下,我应该优先选择另一种? 据我从API PDF得知,“ Obj”版本更为高级,具有更多访问选项和对64位地址的访问权,但是普通版本没有缺陷,因此如果可以使用,我可以使用吗?对吧?
对于代码:
localBuffer = (ctypes.c_uint8 * size)()
myBufferHandle = ?
myAddressHandle32 = ?
t32api.T32_RequestBufferObj(ctypes.byref(myBufferHandle),0)
t32api.T32_RequestAddressObjA32(ctypes.byref(myAddressHandle32),addr)
t32api.T32_ReadMemoryObj(myBufferHandle,myAddressHandle32,size)
t32api.T32_copyDataFromBufferObj(localBuffer,size,myBufferHandle)
t32api.T32_ReleaseBufferObj(ctypes.byref(myBufferHandle))
这是尝试将远程API PDF中的以下代码示例“翻译”为python:
我被卡在问号标记的地方,我不知道如何创建trace32内部类型。我寻找了一个python示例,但找不到任何示例。
解决方法
是的,您不需要使用T32_ReadMemoryObj()
,可以使用T32_ReadMemory()
。我仍然建议使用T32_ReadMemoryObj(),因为它使用起来稍微复杂一点,但提供了充分的灵活性。我认为主要的优点是更好的访问类管理(使用字符串而不是幻数)和64位地址。在简单的用例中,您可能不需要这些。
关于T32_ReadMemoryObj()
:您只需要创建void指针即可。 T32_Request...Obj()
函数将创建对象并设置指向它们的指针。
localBuffer = (ctypes.c_uint8 * size)()
myBufferHandle = ctypes.c_void_p()
myAddressHandle32 = ctypes.c_void_p()
t32api.T32_RequestBufferObj(ctypes.byref(myBufferHandle),0)
t32api.T32_RequestAddressObjA32(ctypes.byref(myAddressHandle32),addr)
t32api.T32_ReadMemoryObj(myBufferHandle,myAddressHandle32,size)
t32api.T32_CopyDataFromBufferObj(localBuffer,size,myBufferHandle)
t32api.T32_ReleaseBufferObj(ctypes.byref(myBufferHandle))