【问题标题】:trace32 using python - use function T32_ReadMemoryObjtrace32 使用 python - 使用函数 T32_ReadMemoryObj
【发布时间】:2020-09-29 08:31:02
【问题描述】:

代码前的一个问题:

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示例,找不到。

【问题讨论】:

  • @dev15 这是我正在尝试编写的代码。

标签: python python-3.x memory trace32 remoteapi


【解决方案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))

【讨论】:

  • 谢谢。我也赞成这个答案,但我没有足够的分数来显示它。
  • 我想接受你的回答给了我需要的分数。
猜你喜欢
  • 2023-03-27
  • 1970-01-01
  • 2011-05-28
  • 2011-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多