问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

ios9.0的系统bug导致的objc_msgSend错误的解决方案

发布网友 发布时间:2023-04-23 02:30

我来回答

1个回答

热心网友 时间:2023-04-27 17:56

看此篇文章之前请先阅读 xcode调试效率 .
ios9.0上遇到一个问题, UITableView 中长按 section ,如果我们的交互中要求弹出menu菜单,那么就会出现如图所示的必现崩溃

1.这个NSDictionary到底是什么?是 UITableView 的数据源吗?
2.如果是数据源是否是多线程导致的呢?( NSDictionary 在多线程下如未处理好极容易崩溃, set 和 get 同时调用的时候,一个对象被 remove 之后野指针了,然后 get 操作会立马导致崩溃)

1.由于工程比较大,建议先写一个demo去做。(大工程的一些配置选项可能导致 lldb 的某些命令无法使用),这一点耗费了我们很大的精力去分析 NSZombie 的 malloc 历史,都没有结果

在工程中拆分出demo之后,由于我们根本没有 NSDictionary ,所以排除了这种情况,但是为什么会有这个问题呢。这个 NSDictionay 又是什么呢?

通过条件断点我们查看最后一次调用的地方,然后打印当前寄存器的值

通过

我们可以去找到rdi,这个返回参数。此时去找这个参数的地址

CFDictionaryCreateMutable 是关键方法,通过它我们知道了如何去分配对象,理想当然,我们得去找到系统的 CFDictionary ,这时候会发现有一个 CFDictionarySetValue 的方法

要截获 CounFoundation 库的C方法,普通的oc的 swizzle 当然是做不到的,但是幸好有 * 提供的 fishhook , fishhook 原理可以参照 iOS安全攻防(十七):Fishhook .
我们现在来截获一把,

这样我们就不会崩溃了。

整个事情的来龙去脉已经清楚了,这里提供了只是提供一个思路去解决问题。但是实际开发中不推荐这么去做,这个方法会对app性能有影响,建议用 UIButton 去模拟规避这个问题。

demo

1. iOS安全攻防(十七):Fishhook
2. lldb官方命令大全
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
若cpu一秒执行n次运算需耗能5w,那执行2n次运算要耗能是大于小于还是等于... 大神们,N5G跟N5W哪里不一样? 刚出生的婴儿会感冒吗 刚出生宝宝感冒的症状 怀庄永佳福代理,什么品牌白酒好呢? 做白酒品牌代理,有怀庄永佳福牌子怎么样? 怀庄永佳福白酒喝得人多吗?代理怎么样? 为什么很多女性都把男闺密当作结婚对象? 关于电影“罗生门”的问题 实际利率法是指什么 江西省考面试时间2023年考试时间 2023江西省公务员考试面试时间 2023年江西省考面试时间 江西省考2023面试时间 公务员面试答题时间 江西公务员考试面试时间 2021年江西省考面试时间 省考面试答题时间 2023年江西省考公务员面试时间 打酒座的引证解释打酒座的引证解释是什么 打酒座的读音打酒座的读音是什么 新贝消毒器消字号 新贝是哪个国家的? 第四章 004 接口测试—数据库工具类封装 拖挂式房车没驾照怎么不收etc _瑜的解释_瑜的解释是什么 贵阳银行etc办理网点星朝曰办吗 丁俞涵名字的寓意 俞_的意思俞_的意思是什么 俞的意思和含义是什么意思 梦见水龙游水的预兆 梦见龙游水中的预兆 梦见田间水满有龙游的预兆 回头的成语回头的成语是什么 回头看的词语 打回头的词语打回头的词语是什么 光大〈信托是否有“融创”信托违约或延期? 中考立定跳远注意事项,立定跳远训练方法有哪些? 绝地求生刺激战场无后坐bug怎么卡无后坐bug卡法教程 wps怎么删除流程图多余的框 Java数据库操作 冰箱缺氟什么症状(冰箱缺氟是什么症状) 冰箱氟利昂没了的表现 海灯法师是骗子二指禅倒立被指作假圆寂后少林寺无人为其吊唁吗 7月7日长沙一停车场被淹后发生了什么? 2022年特大暴雨对门店的影响 五大领域包括哪些内容? 该应用未获得微信登录的权限是因为什麽? 和创(北京)科技股份有限公司广州地址 四川天石和创科技有限公司是国企吗?