lldb "unable to resolve breakpoints" 私下 Objective-C 类?
lldb "unable to resolve breakpoints" in private Objective-C classes?
作为 lldb 练习,我正在尝试将 lldb 附加到 Apple 的 macOS TextEdit.app 并设置符号断点。我可以在 Foundation classes 中设置断点。但是在私人 classes 中,我似乎总是 无法将断点解析到任何实际位置。 为什么?
我知道运送的可执行文件被剥离,但我也知道 Objective-C 符号名称不能被剥离,并且已经阅读了几篇解释如何 "crack" 应用程序的旧文章,看起来像为他们工作,尽管是使用 gdb。当我在 TextEdit 可执行文件上 运行 otool -ov
时,会显示所有私有符号及其地址。
例子
看看它如何很好地用于 Foundation classes:
(lldb) breakpoint set -F "-[NSString initWithFormat:]"
Breakpoint 1: where = Foundation`-[NSString initWithFormat:], address = 0x00007fff2c0c29d0
(lldb) breakpoint set -r '\[NSString .*\]$'
Breakpoint 2: 139 locations.
但是当我在私有 Document
class 中尝试相同的方法时,或者在我通过使用 Steve Nygard 的 class-dump:
(lldb) breakpoint set -F "-[Document validateMenuItem:]"
Breakpoint 3: no locations (pending).
WARNING: Unable to resolve breakpoint to any actual locations.
(lldb) breakpoint set -r '\[Document .*\]$'
Breakpoint 4: no locations (pending).
WARNING: Unable to resolve breakpoint to any actual locations.
目前,lldb 仅使用 ObjC 运行时数据为在表达式解析器中调用方法时提供类型信息。它不会将其中找到的方法折叠到符号 table 中以进行断点查找。
作为 lldb 练习,我正在尝试将 lldb 附加到 Apple 的 macOS TextEdit.app 并设置符号断点。我可以在 Foundation classes 中设置断点。但是在私人 classes 中,我似乎总是 无法将断点解析到任何实际位置。 为什么?
我知道运送的可执行文件被剥离,但我也知道 Objective-C 符号名称不能被剥离,并且已经阅读了几篇解释如何 "crack" 应用程序的旧文章,看起来像为他们工作,尽管是使用 gdb。当我在 TextEdit 可执行文件上 运行 otool -ov
时,会显示所有私有符号及其地址。
例子
看看它如何很好地用于 Foundation classes:
(lldb) breakpoint set -F "-[NSString initWithFormat:]"
Breakpoint 1: where = Foundation`-[NSString initWithFormat:], address = 0x00007fff2c0c29d0
(lldb) breakpoint set -r '\[NSString .*\]$'
Breakpoint 2: 139 locations.
但是当我在私有 Document
class 中尝试相同的方法时,或者在我通过使用 Steve Nygard 的 class-dump:
(lldb) breakpoint set -F "-[Document validateMenuItem:]"
Breakpoint 3: no locations (pending).
WARNING: Unable to resolve breakpoint to any actual locations.
(lldb) breakpoint set -r '\[Document .*\]$'
Breakpoint 4: no locations (pending).
WARNING: Unable to resolve breakpoint to any actual locations.
目前,lldb 仅使用 ObjC 运行时数据为在表达式解析器中调用方法时提供类型信息。它不会将其中找到的方法折叠到符号 table 中以进行断点查找。