3

我正在寻找在越狱的 iPod Touch 4、iOS (5.1.1) 上调试应用程序。唯一的问题是 GDB 似乎对应用程序的类/选择器名称一无所知。

附加和设置地址断点有效,但在尝试使用objective-c名称时无法识别符号。例如,break -[Class Selector:]会失败。(我知道+-代表不同的班级类型。)

另外,我没有这个应用程序的源代码,也无法获得它。

我希望在没有 xcode 或源的设备上纯粹使用 GDB。

有没有人成功地做到过这一点?提前感谢您的任何答案。

4

1 回答 1

3

假设您正在尝试从商店/发布版本中调试应用程序,那么您的二进制文件将被编译器从其中剥离符号。只有调试版本保留符号:发布版本没有理由保留它们。

要找出名称,您需要手动反汇编二进制文件并从那里找出您需要的内容。这是一个冗长的话题,太长了,无法在此处详细输入(O'Reilly 的Hacking & Securing iOS Applications book 有一个很好的分步教程)。

请记住,在底层,Objective-C 消息传递框架是由 C 组成的:如果您不熟悉诸如objc_msgSend函数系列之类的东西,您可能会发现更好地了解它们会对您有所帮助。由于 Objective-C 中的每个方法调用都是使用发送的,objc_msgSend因此您可以通过每次调用时断点来有效地找出类和方法名称(或者更确切地说,断点并自动转储内容:它将被调用很多次来执行它手动将花费太长时间)。

但是,这只会帮助您识别符号名称:当符号从二进制文件中剥离时,您仍然必须在地址本身上设置断点。

于 2013-01-04T23:53:28.070 回答