gpt4 book ai didi

ios - 特定 URL 处的 URLSession dataTask 符号断点

转载 作者:可可西里 更新时间:2023-11-01 01:09:26 26 4
gpt4 key购买 nike

我有一个 API 包装器,它记录了 URLSession 请求的所有 URL。我需要在特定的 URL 调用处设置断点,以便能够在 UI 中轻松找到一个位置,从那里初始化 API 调用。

在任何URLSession dataTask处停止都没有问题。我正在使用 lldb 命令执行此操作 br set -F '-[__NSCFURLSessionTask resume]':

Adding symbolic breakpoint

然后程序停止:

enter image description here

所以,问题:

是否有任何方法可以从上面屏幕截图的上下文中获取 URL,将其与提供的 URL 匹配,如果 URL 不匹配则继续?

或者也许是其他一些想法(例如 lldb python 脚本)?

最佳答案

让我们从计算断点处的instance pointer 值开始。由于 Objective-C selectorSwift .resume() 调用中被发送,我们必须回退到实际执行:

objc_msgSend(receiver, selector, arg1, arg2, ...)

在不讨论太多细节的情况下,我们依赖于 MacOS/iOS ABI 指定哪些 cpu 寄存器用于传递参数。我们特别感兴趣的是第一个参数,用于查找 receiver instance pointer 值。

Private__NSCFURLSessionTask 恰好有以下方法:

- (NSURL*)currentRequest_URL;

@JimIngham 指出了一个惊人的捷径来实现这一点,通用参数同义词是 lldb 中的 $arg1 $arg2 ...。 (注意选择器的 arg1 arg2 将分别是 lldb$arg3 $arg4)这将其简化为:

po [$arg1 currentRequest_URL] 
https://www.google.com

如果 x86 32bit Simulator 对应低于 iPhone 5S 的设备,您可以使用:

(lldb) x/x $esp+4
0xbff9e050: 0x7874dd70
(lldb) po [0x7874dd70 currentRequest_URL]
https://www.google.com

关于ios - 特定 URL 处的 URLSession dataTask 符号断点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48608630/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com