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, access=0x0, buffer=local_buffer, 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, access=0x0, buffer=local_buffer, size=size)
print(local_buffer)

独立于您的问题的两条备注:

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

最新更新