没有合适的资源?快使用搜索试试~ 我知道了~
lldb调试和逆向基础.pdf
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 51 浏览量
2024-03-06
17:10:12
上传
评论
收藏 647KB PDF 举报
温馨提示
试读
27页
lldb基本使用与调试技巧
资源推荐
资源详情
资源评论
1.
2.
3.
4.
5.
6.
每个开发人员都应该研究调试代码的艺术。 但是,有些人会从本书中获得更多。 本书是为:
希望更好地使用LLDB进行调试的开发人员
希望使用LLDB构建复杂调试命令的开发人员
希望深入了解Swift和Objective-C内部的开发人员
有兴趣了解:通过逆向工程,他们可以做些什么的开发人员
对现代主动逆向工程策略感兴趣的开发人员
希望在发现有关其计算机或软件问题的答案时有所帮助的开发人员
自定义LLDB脚本repo:
https://github.com/DerekSelander/LLDB
这些脚本将有助于您的调试/逆向工程,并为您自己的LLDB脚本提供新颖的想法。
第一节:开始LLDB命令
到本节结束时,您将能够使用调试器来执行调试所需的大多数基本任务,以及创建自己的简单自
定义命令
第1章:入门
想知道为什么命令是po? po代表打印对象。 还有p,它只是打印RDI的内容。 po通常更有用,因
为它提供了NSObject的描述或debugDescription方法(如果可用)。
如果您想将调试提升到一个新的水平,汇编(Assembly)是一项重要的技能。
它可以让您深入了解Apple的代码 - 即使您没有任何源代码可供阅读。 它将使您更好地了解
Swift编译器团队如何使用Swift在Objective-C中跳出,并且它将使您更好地了解Apple设备上的
一切是如何工作的。
如果可以,我将始终选择在调试器中使用Objective-C,因为使用Objective-C LLDB比使用Swift
更稳定。
第2章:Help和Apropos
help将转储(dump)所有可用的命令,包括从/ .lldbinit加载的自定义命令。
1 (lldb) help breakpoint
apropos命令可以为您执行此操作;这有点像使用搜索引擎在网络上找到一些东西。
1 (lldb) apropos swift
第3章:使用LLDB Attaching
LLDB“Attaching”的短语实际上有点误导。 名为debugserver(位于Xcode.app/Contents
/SharedFrameworks/LLDB.framework/Resources/)的程序负责附加(attaching)到目标进程。
如果它是远程进程,例如在远程设备上运行的iOS,watchOS或tvOS应用程序,则会在该远程设备
上启动远程调试服务器。 LLDB的工作是启动,连接和协调调试服务器,以处理调试应用程序时的
所有交互。
附加到现有进程
1 lldb -n Xcode
附加到未来的进程
1 lldb -n Finder -w
launch可选的参数
这告诉LLDB使用 (文件列表命令)作为目标可执行文件。/bin/ls
1 lldb -f /bin/ls
使用 process 的选项 更改工作目录-w
1 (lldb) process launch -w /Applications
直接传递参数给,也就是/bin/ls
1 (lldb) process launch -- /Applications
等价于
1 $ ls /Applications
-X选项可扩展您提供的任何shell参数,例如代字号。
1 (lldb) process launch -X true -- ~/Desktop
run 是 的缩写,所以process launch -X true —
1 run ~/Desktop
stdin也有一个选项 ,用来处理标准的输入输出。-i
1
2
(lldb) target delete
(lldb) target create /usr/bin/wc
1 $ echo "hello world" > /tmp/wc_input.txt
1
2
3
4
(lldb) process launch -i /tmp/wc_input.txt
Process 24511 launched: '/usr/bin/wc' (x86_64)
1 2 12
Process 24511 exited with status = 0 (0x00000000)
等同于
1
2
$ wc < /tmp/wc_input.txt
1 2 12
第4章:在代码中停止
无论您是在技术堆栈中使用Swift,Objective-C,C ++,C还是完全不同的语言,您都需要学习如
何创建断点。 可以轻松地在Xcode中单击侧面板以使用GUI创建断点,但LLDB控制台可以让您更好
地控制断点。
Signals(信号)
Unix信号是进程间通信的基本形式。
例如,其中一个信号SIGSTOP可用于保存状态并暂停执行进程,而其对应的SIGCONT则被发送到程
序以恢复执行。调试器可以使用这两个信号暂停并继续执行程序。
Xcode 断点
符号断点(Symbolic breakpoints)是Xcode的一个很好的调试功能。它们允许您在应用程序中的
某个符号上设置断点。例如 ,它引用NSObject实例的init方法。[NSObject init]
您将学习如何在第10章“汇编,寄存器和调用约定”中正确使用和操作寄存器,但是现?在,
只需知道 与 寄存器同义,并且可以被认为是持有实例的调用init时的类。 arg1 $rdi
还有Swift错误断点,它通过在swift_willThrow方法上创建断点来随时停止Swift抛出错误。如果
您正在处理任何容易出错的API,这是一个很好的选择,因为它可以让您快速诊断情况,而不会对
代码的正确性做出错误的假设。
LLDB断点语法
image命令是一个很好的工具,可以帮助内省对设置断点至关重要的细节。
1 (lldb) image lookup -n "-[UIViewController viewDidLoad]"
1 (lldb) image lookup -rn test
Objective-C properties
1
2
3
@interface TestClass : NSObject
@property (nonatomic, strong) NSString *name;
@end
1 (lldb) image lookup -n "-[TestClass name]"
Objective-C properties and dot notation
1
2
3
4
5
6
7
8
9
10
TestClass *a = [[TestClass alloc] init];
// Both equivalent for setters
[a setName:@"hello, world"];
a.name = @"hello, world";
// Both equivalent for getters
NSString *b;
b = [a name]; // b = @"hello, world"
b = a.name; // b = @"hello, world"
重要的是要知道您是在处理Objective-C代码并尝试使用点表示法在setter和getter属性上创建断
点。
Swift properties
1
2
3
class SwiftTestClass: NSObject {
var name: String!
}
In the LLDB console, type the following:
1 (lldb) image lookup -rn Signals.SwiftTestClass.name.setter
You’ll get output similar to below:
1
2
3
1 match found in /Users/derekselander/Library/Developer/Xcode/ DerivedData
/Signals-atqcdyprrotlrvdanihoufkwzyqh/Build/Products/Debugiphonesimulator
/Signals.app/Signals:
Address: Signals[0x000000010000cc70] (Signals.__TEXT.__text + 44816)
剩余26页未读,继续阅读
资源评论
北极象
- 粉丝: 1w+
- 资源: 345
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 农村信用社联合社计算机信息系统投产与变更管理办.docx
- 农村信用社联合社计算机信息系统数据管理办法.docx
- 利用SPSS作临床效度分析线上计算网站介绍-医学研究部统计谘.(医学PPT课件).ppt
- 利用Zabbix监控mysqldump定时备份数据库状态.docx
- 利用计算机解决问题的基本过程.doc
- 化工铁路通信工程总结.doc
- 北京大学网络教育软件工程作业.docx
- 医药公司(连锁店)计算机操作规程未新系统的自行按照旧制修改-新系统过制的编号加修模版.doc
- 医药公司(连锁店)计算机系统操作规程模版.doc
- 医药连锁门店计算机系统的操作和管理程序未新系统的自行按照旧制修改-新系统过制的编号加修模版.docx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功