在 OS X 上使用 LLDB 调用方法时如何设置断点?

逆向工程 调试器 操作系统 数据库
2021-06-20 20:07:43

我试图达到我在 LLDB (CLI) 中设置的断点,但无论出于何种原因,我都没有达到我的断点。我正在处理 OS X 上的股票 Calculator.app,并在打开 Calculator.app 的“关于”对话框时尝试调用/命中我的断点。

我启动 Calculator.app,然后从终端窗口启动 lldb。我使用 ps 和 grep 找到了 Calculator.app 的过程。我使用 LLDB 附加到正在运行的进程。然后我continue在 LLDB 中发出命令以允许 Calculator.app 继续运行。

然后我在调用以下方法时在 LLDB 中设置断点, showAbout

我在 LLDB 中键入以下命令, (lldb) breakpoint set --method showAbout

但是,当我About Calculator从菜单栏中单击时,它不会停止程序,而是显示计算器的“关于”对话框。

1个回答

可以通过运行nm. 您将需要使用class-dump以下方法找到该方法的地址

$ class-dump -A /Applications/Calculator.app | grep showAbout
- (void)showAbout:(id)arg1; // IMP=0x0000000100009939

然而,由于计算器应用程序已经在运行,地址已经因为 ASLR 而被滑动。要找到 ASLR 幻灯片,您可以使用我的名为get_aslr 的工具,如下所示:

$ sudo get_aslr $(pgrep Calculator)
ASLR slide: 0x9508000

然后将这两个数字相加:

0x0000000100009939 + 0x9508000 = 0x109511939

那就是方法的当前地址showAbout:现在您只需要在以下位置设置断点lldb

b *0x109511939

它有效!