首页
社区
课程
招聘
[原创] ιldb 脚本 —— 你才叫 lldb,我叫 "约塔 ldb"
发表于: 2025-12-18 19:34 5039

[原创] ιldb 脚本 —— 你才叫 lldb,我叫 "约塔 ldb"

2025-12-18 19:34
5039

ιldb 是一个基于 LLDB 的调试脚本工具,提供了多种便捷的调试命令和命令管理功能。它通过模块化设计,将常用的调试操作封装为简单易用的命令,并支持命令的保存、显示、删除和执行。如果这些命令的命名方式与您使用的习惯不符合,也可以通过修改 cmd_config.json 来实现个性化定制。

ιldb 内置命令保存与注释功能,可告别「调试命令 / 地址复制到文本、再从文本粘贴调用」的繁琐流程,实现命令的快速执行与管理。

后续笔者有时间了也会继续完善和优化,并且已经发布在 github 以及 gitee 上,欢迎大家共同讨论和学习。如果你等不及想添加自己的命令,也可以研究一下源码,主要就是修改 ιldb/src/core/ 目录下的 lldb_script_handler.py ,这里面是所有 lldb 脚本的具体实现。utils.py 是一些通用的工具类函数,比如确保地址以 0x 开头等,data_handler.py 主要用于维护一些全局变量,json 就是从这里读取并缓存的。

ιldb 在 gitee 的项目地址:877K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8W2k6g2)9J5k6h3y4G2L8g2)9J5c8Y4W2G2N6i4u0Q4x3X3c8Y4K9i4c8Q4x3V1k6&6N6h3g2@1j5g2)9J5k6r3I4V1j5W2)9J5c8R3`.`.

ιldb 在 github 的项目地址:891K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6&6L8%4g2J5i4K6u0V1k6$3W2@1i4K6u0r3P5i4g2W2N6r3q4Q4x3X3c8D9k6r3t1`.

将 ιldb.py 文件放置在您的 LLDB 插件目录中

在 ~/.lldbinit/ 文件中添加以下命令加载脚本:

加载成功后,您将看到所有已注册的命令列表

QQ_1766055646737

保存 LLDB 历史命令到 cmd_record.json 文件中,支持多种格式:

显示已保存的所有命令及其描述:

输出示例:

根据序号删除已保存的命令:

删除后会自动显示更新后的命令列表。

根据序号执行已保存的命令:

执行时会显示命令内容及其描述。

QQ_1766056338879

指定当前调试的模块,后续的 mark 命令将基于该模块计算偏移地址:

QQ_1766056442852

基于指定模块的偏移地址设置断点,支持多地址:

IDA 中 encryptWithChaCha20Poly1305 函数的偏移地址是 A8F4,那么可以使用 mark 快速打上断点

QQ_1766056554065

基于动态地址设置断点,支持多地址:

QQ_1766056843156

基于 using 指定的模块 来计算偏移的动态内存地址:

QQ_1766056969351

基于当前模块计算静态偏移地址:

QQ_1766057010853

对指定地址进行内存修改,默认会执行端序转换:

注意:地址和机器码不一定要以 0x 开头,默认是十六进制。

QQ_1766057146359

读取内存内容,支持多种格式:

QQ_1766057220160

将指定地址的内存填充为 NOP 指令:

QQ_1766057283580

获取地址中的指针地址:

尝试将寄存器中的内容解析为 Swift String 字符串,只需要指定一个寄存器,另外一个寄存器内部会自动取读取

ιldb 使用两个主要的配置文件:

存储命令配置信息,包括:

cmd_script: 命令脚本映射

cmd_alias: 命令别名映射

cus_cmd: 自定义命令列表

cmd_notes: 命令注释列表

存储用户保存的命令记录,每个记录包含:

为了提高使用效率,ιldb 提供了以下命令映射:

ιldb 支持通过修改 cmd_config.json 文件添加自定义命令和别名,实现个性化定制。

【 2025年12月20号 】

1、修复 ptr 命令 和 memread -ptr 命令的相关问题;

2、新增 ss 和 sd 命令,可以用于解析 Swift String 对象和 Data 对象。

# ***/ 替换为你自己的路径
command script import ***/ιldb.py
# ***/ 替换为你自己的路径
command script import ***/ιldb.py
# 保存最近一条命令,描述为空
save
 
# 保存最近一条命令,并添加描述
save "这是最近一条命令"
 
# 保存指定序号的历史命令,并添加描述
save 0 "这是 history 中序号为 0 的命令" 2 "这是 history 命令中序号为 2 的命令"
 
# 混合格式:保存多个命令,只有部分带描述
save 0 2 "这是命令"
# 保存最近一条命令,描述为空
save
 
# 保存最近一条命令,并添加描述
save "这是最近一条命令"
 
# 保存指定序号的历史命令,并添加描述
save 0 "这是 history 中序号为 0 的命令" 2 "这是 history 命令中序号为 2 的命令"
 
# 混合格式:保存多个命令,只有部分带描述
save 0 2 "这是命令"
show
show
[ 命令列表 ]
0. using       —— 指定模块(后续mark命令基于该模块)
1. mark        —— 基于模块偏移地址打断点(支持多地址)
2. markd       —— 基于动态地址打断点(支持多地址)
3. memread     —— 读取内存内容
4. process     —— 启动进程
[ 命令列表 ]
0. using       —— 指定模块(后续mark命令基于该模块)
1. mark        —— 基于模块偏移地址打断点(支持多地址)
2. markd       —— 基于动态地址打断点(支持多地址)
3. memread     —— 读取内存内容
4. process     —— 启动进程
# 删除单个命令
rm 1
 
# 删除多个命令
rm 0 2 4
# 删除单个命令
rm 1
 
# 删除多个命令
rm 0 2 4
# 执行序号为1的命令
exec 1
# 执行序号为1的命令
exec 1
# 使用应用程序的主模块
using
 
# 使用指定的模块
using SwiftDemo.debug.dylib
# 使用应用程序的主模块
using
 
# 使用指定的模块
using SwiftDemo.debug.dylib
# 单个地址
mark 0x1063c2c10
 
# 多个地址
mark 0x1063c2c10 1063c2c18 0x1063c2c20
 
# 地址范围(地址必须以0x开头)
mark [0x1063c2c10, 0x1063c2c20]
# 单个地址
mark 0x1063c2c10
 
# 多个地址
mark 0x1063c2c10 1063c2c18 0x1063c2c20
 
# 地址范围(地址必须以0x开头)
mark [0x1063c2c10, 0x1063c2c20]
# 单个地址
markd 0x12345678
 
# 多个地址
markd 0x12345678 0x87654321
# 单个地址
markd 0x12345678
 
# 多个地址
markd 0x12345678 0x87654321

[培训]Windows内核深度攻防:从Hook技术到Rootkit实战!

最后于 2025-12-24 18:42 被αβγδεξπ编辑 ,原因:
上传的附件:
收藏
免费 24
支持
分享
最新回复 (20)
雪    币: 7
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
2
感谢分享
2025-12-18 20:54
0
雪    币: 6
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
3
感谢分享
2025-12-19 09:57
0
雪    币: 6
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
4
666
2025-12-19 10:26
0
雪    币: 2489
活跃值: (4802)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
666
2025-12-19 10:59
0
雪    币: 594
活跃值: (4453)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
看看
2025-12-19 11:11
0
雪    币: 3123
活跃值: (4444)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
7
支持
2025-12-19 15:12
0
雪    币: 144
活跃值: (2063)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
666
2025-12-20 01:30
0
雪    币: 5702
活跃值: (9692)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
不明觉厉
2025-12-20 12:05
0
雪    币: 8741
活跃值: (6537)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
感谢分享
2025-12-21 17:22
0
雪    币: 230
活跃值: (1536)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
1
2025-12-22 09:28
0
雪    币: 816
活跃值: (2092)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
要是有trace 指令 就更好了
2025-12-22 10:28
0
雪    币: 1080
活跃值: (1782)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
13
guijian 要是有trace 指令 就更好了
还真有,不过我需要优化一下
2025-12-22 15:10
0
雪    币: 1080
活跃值: (1782)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
14

是参考的  《 脚本工具:基于lldb的trace脚本 》 这篇文章,你要是感兴趣,可以提前看看

最后于 2025-12-22 15:13 被αβγδεξπ编辑 ,原因:
2025-12-22 15:11
0
雪    币: 634
活跃值: (5323)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
15
111
2025-12-23 15:01
0
雪    币: 8
活跃值: (60)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
哈哈,我也这么用的。除了扩展命令,我还增加了一个加载的脚本的, 有点像是ollydbg的脚本。
2025-12-24 12:00
0
雪    币: 1080
活跃值: (1782)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
17
毕索 哈哈,我也这么用的。除了扩展命令,我还增加了一个加载的脚本的, 有点像是ollydbg的脚本。
什么叫“加载的脚本的”,是一个加载其他脚本的功能吗
2025-12-24 17:37
0
雪    币: 16
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
18
大佬,能解开钱包被恶意多签吗
2025-12-27 20:02
0
雪    币: 0
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
19
66666
2026-1-4 10:35
0
雪    币: 31
活跃值: (695)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
感谢分享
5天前
0
雪    币: 0
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
21
666
4天前
0
游客
登录 | 注册 方可回帖
返回