python - 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)
与您的问题无关的两个评论:
- 我建议使用 T32_ReadMemoryObj() 而不是 T32_ReadMemory()。
- 检查trace32_and_python.pdf。新的 TRACE32 版本包括一个 Python 模块,您可以直接导入。
推荐阅读
- python-3.x - 无法使用 Gstreamer-Python 为两个摄像头设置参数
- cordova - 什么是cordova ios config.xml 文件设置
- ms-access - 在 ms 中访问如何以编程方式将查询导出到文本文件
- sql-server - 如何在 SQL Server 中的字符串中查找整数值
- python-3.x - 在 Python 中随时间序列数据移动具有高斯形状的窗口
- fullpage.js - Fullpage.js - 移动设备上的锚点在滚动时不会回到该部分的顶部
- spring - 在 repo.spring.io 端点遇到间歇性问题
- javascript - 我似乎无法使“getElementsByID”正常工作,始终返回“未捕获的类型错误:无法读取未定义的属性。”
- jquery - jQuery Sortable 获取新的父 ID?
- c++ - 已创建 GitHub 存储库但无法上传 VS 解决方案