1

代码前的一个问题:

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: 使用 T32_ReadMemoryObj 的 c 代码示例

我被问号标记的地方卡住了,我不知道如何创建 trace32 内部类型。我寻找了一个 python 示例,但找不到任何示例。

4

1 回答 1

1

是的,你是对的,你不需要使用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))
于 2020-09-29T14:58:39.057 回答