简单的gdb远程串行协议包装器

pyrsp的Python项目详细描述


*pyrsp

pyrsp是一个简单的包装,它包含了[[https://sourceware.org/gdb/current/onlinedocs/gdb/remote protocol.html remote protocol][gdb remote serial
protocol]]。目前ARM Cortex M3设备可以使用
[[https://github.com/gsmcmullin/blackmagic][blackmagic jtag debugger]]进行测试,QEMU支持i386和amd64 QEMU目标
。但是,支持使用此协议的其他设备应该非常简单,例如通过openocd的buspirates。


可能的用途:设备单元测试、模糊处理、逆向工程。


g info,.text segment)从elf文件中,
在断点上分派回调,运行与
elf文件关联的二进制文件,并显示与地址关联的源代码。

**取决于
**更改
**v0.4-感谢来自ispras.ru的<;3 willem、vasily和dmitry
-python3支持
-支持调试多线程用户空间程序
-更健壮的qemu调试
-大大改进的测试
-协议中的rle数据处理
-支持新构造的api
**v0.3
-对stlink2设备的支持
-对转储故障状态和mpu寄存器的基本支持
-修复
**v0.2
-将rsp部分重构为elf.py和utils.py
-对i386和amd64 qemu目标的支持
-r中的超时eadpkt
-直接从elf提取.text,不需要.bin
-支持内存操作的slice运算符
-使用报告的packetsize
-threadinfo支持
**python示例
')期望test.elf存在
rsp.load()将test.elf加载到工作区(.text segment)


def bru cb(self):
("aaaaa",0x20000000)

ump_cb)
rsp.set戋br('my戋u fun',br戋cb)


o由
运行:
+开始示例
$rsp.py/dev/ttyacm0 test
+结束示例
**示例会话
请参阅下面示例中运行的代码/
+开始示例
工作区:0x20019000
条目:0x20019001
可用目标:
否。ATT驱动程序
1 stm32f4xx

r0 r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 sp lr pc xpsr msp psp
2001f6b4 0000000 4 00000000 2001f6b4 2001f754 00000020 000008000 000000 ff 2001fb9c 00000020 00000000 08001F31 2001F6B0 2001902B 20019036 21000003 2001F6B0 00000000
负载测试。bin
验证测试正常
设置中断:@rsp_finish(0x20019036)正常
设置中断:@rsp_dump(0x20019034)正常
设置新PC:@test(0x20019001)正常
继续

r0 r1 r2 r3 r4 r5r6 r7 r8 r9 r10 r11 r12 sp lr pc xpsr msp psp
2001f6a4 0000000 4 00000000 2001f6a4 2001f754 00000020 000008000 000000 ff 2001fb9c 00000020 00000000 08001f31 2001f6a0 20019013 20019034 2100003 2001f6a0 00000000
断开点命中:rsp_dump
test.c:5 rsp_dump((无符号字符*)&number,4);
00000000….


20019038 0000000 b 00000000 00000000 2001f6a4 2001F754 00000020 00008000 000000FF 2001FB9C 00000020 00000000 08001F31 2001F6A0 2001901B 20019034 21000003 2001F6A0 00000000
断点命中:rsp_dump
测试。C:6 rsp_dump((无符号字符*)"hello world",11);
68656c6c6f20776f 726c 6 4 hello.world

r0 r1 r2r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 sp lr pc xpsr msp psp
2001f6a4 0000000 4 00000000 2001f6a4 2001f754 00000020 000008000 000000 ff 2001fb9c 00000020 00000000 08001f31 2001f6a0 20019027 20019034 21000003 2001F6A0 00000000
断点命中:rsp_dump
测试.c:8 rsp_dump((无符号字符*)&number,4);
55aa55aa u.u.

2001f6A4 0000000 4 00000000 00000000 2001f6A4 2001f754 00000020 00008000 000000FF 2001fB9C 00000020 00000000 08001F31 2001f6A0 2001902B 20019036 2100003 2001f6A0 00000000
断点命中:rsp_finish
清除断点:@rsp_dump(0x20019034)确定
清除断点:@rsp_finish(0x20019036)确定
继续并分离


开始示例python
发送(self,data,retries=50)
结束示例python
通过rsp协议将数据发送到设备



erwise在.文本段开始处
aka self.工作区

示例python
set_reg(self,reg,val)
_示例
通过stdout刷新和转储寄存器

d_example
将PC设置为在给定情况下启动,或设置为ELF头中的条目地址,将
控件传递给设备并处理断点

priate回调。



断点,继续运行
CPU,并从调试设备分离

_转储回调,如果调用rsp_dump,则单击。输出到stdout
源代码行,以及由$r0指向的大小为
$r1字节的内存十六进制转储。然后它继续运行。

le python
调用(self,start=none,finish='rsp_finish',dump='rsp_dump',verify=true)
将self.elf给定的.text段加载到设备工作区(.text seg)的设备中。
2。并在start或elf e_entry指定的函数处开始执行。
3。在到达rsp_dump的断点后,r0指向的缓冲区将转储r1字节。
4。到达rsp_u finish的断点后,它将删除所有断点,并分离

le python
rsp[0:100]
v7,您可以调用并链接
rsp.s和rsp.h中的代码。它只需要4字节。


_完成(void){
,而(1);
}

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
异常如何在java中优雅地处理FileNotFoundexception   java线程卡在BlockingQueue上。无缘无故   类网格程序w/java   StrutsJava:动态应用Velocity脚本   java在运行时重写/禁用方面   java Apache POI无法正确读取Excel单元格中的秒数   具有不同用户权限的Java文件夹/文件创建   java我可以检查Firebase ValueEventListener onDataChanged是否已被调用吗?   尽管获得了用户权限,java Android开发文件权限仍被拒绝   java如何使用JPA映射map<EnumType,Double>?   java是否使用UI线程显示toast消息?   JAVAlang.IllegalArgumentException:不支持的元素:rss   java Android setRequestedOrientation活动和视图生命周期   安卓如何在Java中定义支票盒?   在Java中,对于大输入,字符串解析长期失败   使Java在XP中按计划任务运行读取env用户变量时出现问题   任务“:workflowsjava:NodeDriver”的梯度执行失败。main()   java如何检测是否只设置了部分属性?   在客户端web服务上使用JBossWS时,java无法找到/更改log4j的默认配置   java LibGDX写入文本文件并接收各种错误