Xcode中断点能加上且能触发
此处主要整理,Xcode中确保断点能加上且能触发:
先介绍背景:
- Xcode中断点类型
- Xcode通过函数名加断点=函数名的断点
- Xcode中的插件hook代码的断点=hook代码的断点
再介绍具体心得:
Xcode中确保断点能加上且能触发
- 概述
- 函数名的断点
- 加不上断点
- 原因
- 所属二进制中不存在该symbol符号
- 解决办法:调试找出底层函数(lldb无名函数),给底层函数加断点
- 所属二进制中不存在该symbol符号
- 原因
- 能加上断点,但没触发
- 原因
- Xcode调试的目标 不是 函数所属的被调用的目标
- 解决办法: 确保Xcode调试目标 是=等于 函数被调用的所属目标
- Xcode调试的目标 不是 函数所属的被调用的目标
- 原因
- 加不上断点
- hook代码的断点
- 加不上断点
- 原因
- 加了hook代码的dylib的最新插件没被加载
- 解决办法:确保最新的dylib被加载
- 函数被触发的目标 和 Xcode调试目标 不一致
- 解决办法:确保函数被触发目标和Xcode调试目标一致
- 具体办法:把Xcode调试目标改为函数被触发的目标
- 解决办法:确保函数被触发目标和Xcode调试目标一致
- 加了hook代码的dylib的最新插件没被加载
- 原因
- 能加上断点,但没触发
- 原因
- 函数名搞错了
- 解决办法:使用正确的函数
- hook目标和Xcode调试目标都不对
- 解决办法:把hook的目标 和 Xcode调试目标,都改为:函数被触发的目标
- 函数名搞错了
- 原因
- 加不上断点
- 函数名的断点
- 概述
详解
- 函数名的断点
- 加不上断点
- 可能原因
- 所属二进制中不存在该symbol符号
- 举例
-[AKAppleIDAuthenticationService _authenticateWithContext:completion:]- 现象
- 如何验证:image lookup找不到该函数
(lldb) image lookup -vn "-[AKAppleIDAuthenticationService _authenticateWithContext:completion:]" (lldb) - 解决办法:经调试,找到底层真正的函数,此处的lldb的无名的函数:
akd的___lldb_unnamed_symbol1621,给此lldb无名函数加断点- 写法
Symbol:___lldb_unnamed_symbol1621Module:akd
- 效果
- 写法
- 现象
- 举例
- 所属二进制中不存在该symbol符号
- 可能原因
- 能加上断点,但没触发
- 可能原因
- Xcode调试的目标 不是 函数所属的被调用的目标
- 举例
__62-[AAUISignInViewController _attemptAuthenticationWithContext:]_block_invoke_2- 现象

- 细节:
- Xcode调用的目标:
akd - 函数(
__62-[AAUISignInViewController _attemptAuthenticationWithContext:]_block_invoke_2)被调用的所属目标:Preferences
- Xcode调用的目标:
- 解决办法
- 确保Xcode调试目标 是 函数被调用的所属目标 -》 此处都是:
Preferences- 具体步骤:让Xcode调试
Preferences(而不是akd)
- 此处的
78114是Preferences的PID
- 此处的
- 具体步骤:让Xcode调试
- 确保Xcode调试目标 是 函数被调用的所属目标 -》 此处都是:
- 现象
-[NSMutableURLRequest ams_addAcceptLanguageHeader]- 现象
- hook插件
jailAppleAccount中,hook目标是:com.apple.Preferences,以及Xcode调试Preferences,但是断点没触发
- hook插件
- 解决办法
- 把Xcode的调试目标改为
amsaccountsd- 即可顺利触发断点
- 即可顺利触发断点
- 具体解释
- 后来确认此处函数
-[NSMutableURLRequest ams_addAcceptLanguageHeader]所属的二进制是AppleMediaServices - 所以要去把调试目标换成(和
AppleMediaServices密切相关的)AppleMediaServices.framework的amsaccountsd
- 后来确认此处函数
- 把Xcode的调试目标改为
- 现象
- 举例
- Xcode调试的目标 不是 函数所属的被调用的目标
- 可能原因
- 加不上断点
- hook代码的断点
- 加不上断点
- 可能原因
- 加了hook代码的dylib的最新插件没被加载
- 举例
-[NSXPCConnection remoteObjectProxyWithErrorHandler:]- 现象:

- 注:
86215是Preferences的PID
- 注:
- 此时:Xcode调试目标=被hook目标:
Preferences
- 原因:包含了新版的hook代码的dylib并没有被加载
- 细节:此处Xcode中iOSOpenDev的dylib插件,编译安装后,虽然
Respring=重启桌面,但是其实Preferences=设置app,并没有重启,导致包含了新版的hook代码的dylib并没有被加载
- 细节:此处Xcode中iOSOpenDev的dylib插件,编译安装后,虽然
- 解决办法:重启此处被hook目标
Preferences - 具体步骤:杀掉
Preferences,重启Preferences- 确保:最新的dylib被加载
- 详见:背景知识
- 确保:最新的dylib被加载
- 现象:
- 举例
- 函数被触发的目标 和 Xcode调试目标 不一致
- 举例
objc_alloc_init- 现象
- 细节
- 函数objc_alloc_init被触发的目标是:
Preferences - Xcode调试的目标:
akd
- 函数objc_alloc_init被触发的目标是:
- 解决办法:
- 确保Xcode调试目标 和 函数被触发目标 一致,此处都是
Preferences
- 注:此处
4797是Preferences的PID
- 注:此处
- 确保Xcode调试目标 和 函数被触发目标 一致,此处都是
- 现象
-[AKAppleIDAuthenticationContextManager shouldContinueWithAuthenticationResults:error:forContextID:completion:]- 现象
- 细节:
- Xcode调试目标:
akd - 函数被调用到的目标:
Preferences
- Xcode调试目标:
- 解决办法:
- 改Xcode调试目标为
Preferences
- 注:此时
Preferences的PID是84125
- 注:此时
- 效果:即可
- 能加上hook函数的断点
- 且hook函数的断点可以触发
- 能加上hook函数的断点
- 改Xcode调试目标为
- 现象
- 举例
- 加了hook代码的dylib的最新插件没被加载
- 可能原因
- 能加上断点,但没触发
- 可能原因
- 函数名搞错了
- 举例
-[AKAppleIDAuthenticationService _authenticationParametersForUsername:altDSID:context:]- 现象
- 原因
- 调试期间,看错函数名了,误把
-[AKAppleIDAuthenticationService _authenticateWithContext:completion:]
- 看错成:
-[AKAppleIDAuthenticationService _authenticationParametersForUsername:altDSID:context:]
- 调试期间,看错函数名了,误把
- 解决办法:
- 改为此处正确的函数:
-[AKAppleIDAuthenticationService _authenticateWithContext:completion:]
- 去加hook代码,加断点
- -》最后就可以正常触发hook代码的断点了
- 改为此处正确的函数:
- 现象
- 举例
- hook目标和Xcode调试目标都不对
- 举例
-[AKAppleIDAuthenticationService _performAuthenticationWithContext:completion:]- 现象

- 细节:函数
-[AKAppleIDAuthenticationService _performAuthenticationWithContext:completion:]是在akd``(AuthKit的daemon程序)中被触发的
- 此时的
- hook目标是:
Preferences - Xcode调试目标:
Preferences
- hook目标是:
- 解决办法
- 把hook目标改为:
akd- 注:
iOSOpenDev中的插件,可以加多个hook目标,所以此处:额外再加上akd即可
- 注:
- 把Xcode调试目标改为:
akd
- 把hook目标改为:
- 现象
- 举例
- 函数名搞错了
- 可能原因
- 加不上断点
- 函数名的断点










