简单的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 Admob不使用webview   Java Wicket表单:序列化对象类“myClassName”时出错   java googledriveapi更新文件与我的帐户管理员   java简单框架未知xml标记解析   java如何使用主类和用户获取Spark应用程序ID   java如何更改自定义属性的值?   java有没有办法在jMock中找到未使用的期望值?   gradle运行任务的java文档?   java通过使用数组来存储文本文件的行,通过覆盖来删除文本文件中的行   用于表达式语言注入的java利用负载   java IDEStyle程序运行   java在运行时启用/禁用Springws   爪哇芦苇。formatNumber NullPointException   java为什么我的代码无法检测两个动态实体之间的碰撞?