【问题标题】:Debugging iOS app with gdb on jailbroken iPod touch | Objective-C Symbols在越狱的 iPod touch 上使用 gdb 调试 iOS 应用Objective-C 符号
【发布时间】:2013-01-04 22:57:54
【问题描述】:

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

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

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

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

以前有人成功过吗?提前感谢您的任何回答。

【问题讨论】:

    标签: objective-c ios gdb


    【解决方案1】:

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

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

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

    但是,这只会帮助您识别符号名称:由于符号已从二进制文件中删除,您仍然需要在地址本身上设置断点。

    【讨论】:

    • 感谢您的回复。我想我的印象是,由于所有内容都是由字符串组成的,因此我可以在 Objective-c 应用程序的发布版本上设置命名断点。我确实知道反汇编二进制文件中的类和选择器名称。这些可以用来设置断点吗?显然,在反汇编二进制文件时,我可以看到各种类和选择器名称。我想我可以在从 gdb 设置断点时使用这些。
    猜你喜欢
    • 2011-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-11
    • 2015-07-06
    相关资源
    最近更新 更多