【问题标题】:trace32 python api read memory address - how?trace32 python api读取内存地址-如何?
【发布时间】:2020-09-24 08:50:09
【问题描述】:

我正在尝试使用 python 脚本通过 trace32 从内存中读取。我找到了以下文档:https://www2.lauterbach.com/pdf/api_remote.pdf

我管理了以下代码:

local_buffer = ctypes.POINTER(ctypes.c_uint32)
t32api.T32_ReadMemory(byteAddress=addr, access=0x0, buffer=local_buffer, size=size)
print(local_buffer)

当然,有一个 t32api 对象的初始化 - 有效。但是我在这里粘贴的代码会导致以下python错误:

Traceback (most recent call last):
  File "<path_to_python_script>", line 599, in <module>
    main()
  File "<path_to_python_script>", line 590, in main
    process()
  File "<path_to_python_script>", line 269, in process
    NumberOfEmpr = read_addr(0xf0083100)
  File "<path_to_python_script>", line 148, in read_addr
    return read_addr_t32(addr, size)
  File "<path_to_python_script>", line 137, in read_addr_t32
    t32api.T32_ReadMemory(byteAddress=addr, access=0x0, buffer=local_buffer, size=size)
OSError: exception: access violation writing 0xXXXXXXXX

当然0xXXXXXXXX是某个地址的占位符,我猜是local_buffer的地址。

如果有人知道如何解决这个问题,我将不胜感激。

【问题讨论】:

  • 这里是如何通过 Python 中的经典远程 API 写入 到内存的指南:stackoverflow.com/a/47717395/4727717(阅读方式基本相同,在底部简要显示答案。)

标签: python python-3.x memory trace32


【解决方案1】:

问题是你给T32_ReadMemory()的缓冲区指针不应该只是一个指针,还应该是一个指向现有内存的指针。

所以你需要改变

local_buffer = ctypes.POINTER(ctypes.c_uint32)
t32api.T32_ReadMemory(byteAddress=addr, access=0x0, buffer=local_buffer, size=size)
print(local_buffer)

到

local_buffer = (ctypes.c_ubyte * size)()
t32api.T32_ReadMemory(byteAddress=addr, access=0x0, buffer=local_buffer, size=size)
print(local_buffer)

与您的问题无关的两句话:

  1. 我建议使用 T32_ReadMemoryObj() 而不是 T32_ReadMemory()。
  2. 检查trace32_and_python.pdf。新的 TRACE32 版本包含一个 Python 模块,您只需导入即可。

【讨论】:

  • 我希望我有这个新的 TRACE32 版本。看起来它会让生活变得更轻松。
  • 另外,您能否添加一个如何使用 T32_ReadMemoryObj() 的示例?我试过了,但不知道怎么用。
  • 在 api_remote.pdf(或 api_remote_c.pdf)中有关于如何使用它的 C 示例。如果您有任何问题,请在新问题中发布您的代码,我会尽力帮助您。
  • 我知道这些例子,只是不知道如何将它们“翻译”成 python。尤其是内部 t32 对象。无论如何,我会发布一个新问题。
猜你喜欢
  • 2017-05-09
  • 2016-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-28
  • 1970-01-01
相关资源
最近更新 更多