首页
社区
课程
招聘
[原创]gdb---结合python自动化调试
发表于: 2024-1-5 22:21 8665

[原创]gdb---结合python自动化调试

2024-1-5 22:21
8665

gdb支持通过python自动化调试,实现循环、读写内存、保存内容等复杂逻辑,不需要安装模块。

官方文档: https://sourceware.org/gdb/current/onlinedocs/gdb.html/Python.html
官方文档直接看不太容易理解,可以结合chatgpt、文心一言等工具使用。

核心函数:

脚本示例 test.py:

启动gdb,执行如下命令调用脚本:

或者直接启动时指定脚本

hello.c

python脚本

2023/5/3

gdb.execute(command [, from_tty [, to_string]])
gdb.execute(command [, from_tty [, to_string]])
import gdb
 
gdb.execute("break *0x12345678")
gdb.execute("continue")
# 指定 to_string=True 可以让脚本接收输出并做后续处理,这是能让gdb和脚本交互的重要参数
the_line = gdb.execute("info registers eip", to_string=True)
gdb.execute("dump memory /root/memory.dump $ebx $ebx+0x100")
import gdb
 
gdb.execute("break *0x12345678")
gdb.execute("continue")
# 指定 to_string=True 可以让脚本接收输出并做后续处理,这是能让gdb和脚本交互的重要参数
the_line = gdb.execute("info registers eip", to_string=True)
gdb.execute("dump memory /root/memory.dump $ebx $ebx+0x100")
// gcc -o hello hello.c
#include <stdio.h>
 
int main(){
    printf("Hello World!\n");
    return 0;
}
// gcc -o hello hello.c
#include <stdio.h>
 
int main(){
    printf("Hello World!\n");
    return 0;
}
# gdb -x test.py
import gdb
 
gdb.execute("file hello")
gdb.execute("break main")
gdb.execute("run")
gdb.execute("nexti 2")
 
# 获取当前被调试程序的栈帧
frame = gdb.selected_frame()
# 获取寄存器'rax'的值
rax = frame.read_register("rax")
# 打印寄存器的值
print("rax的值是: 0x%x" % rax)
 
# 获取当前GDB中的被调试程序(也称为“下级”)
inferior = gdb.selected_inferior()
# 从地址rax开始读取32个字节(即0x20字节)的内存数据
the_mem = inferior.read_memory(rax, 0x20)
# 打印内存数据
print("the_mem: ", the_mem.tobytes())
# gdb -x test.py
import gdb

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 3
支持
分享
最新回复 (3)
雪    币: 10
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
2
感谢分享
2024-1-6 10:17
0
雪    币: 3070
活跃值: (30876)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
感谢分享
2024-1-6 23:08
1
雪    币: 17
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
4
感谢分享
2024-1-7 07:11
0
游客
登录 | 注册 方可回帖
返回
//