微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

trace32 python api读取内存地址-如何?

如何解决trace32 python api读取内存地址-如何?

我正在尝试使用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,size=size)
OSError: exception: access violation writing 0xXXXXXXXX

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

如果有人知道如何解决此问题,我将很感激。

解决方法

问题在于,您赋予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,size=size)
print(local_buffer)

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

  1. 我建议使用T32_ReadMemoryObj()代替T32_ReadMemory()。
  2. 选中trace32_and_python.pdf。新的TRACE32版本包括一个Python模块,您只需导入即可。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。