trace32 使用 python - 使用函数 T32_ReadMemoryObj
trace32 using python - use function T32_ReadMemoryObj
代码前的一个问题:
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(),因为它使用起来稍微复杂一点,但提供了充分的灵活性。在我看来,主要优点是更好的访问 class 管理(字符串而不是幻数)和 64 位地址。在简单的用例中,您可能不需要这些。
关于你的T32_ReadMemoryObj()
:你只需要创建空指针。 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))
代码前的一个问题:
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(),因为它使用起来稍微复杂一点,但提供了充分的灵活性。在我看来,主要优点是更好的访问 class 管理(字符串而不是幻数)和 64 位地址。在简单的用例中,您可能不需要这些。
关于你的T32_ReadMemoryObj()
:你只需要创建空指针。 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))