深入iOS体系底层之措施中的汇编代码
副问题[/!--empirenews.page--]
合抱之木,生于毫末;九层之台,起于垒土;千里之行,始于足下。--(老子·道德经 ) 对付一个闭源体系来说假如想研究某些逻辑的内部实现就必要对汇编说话举办把握和相识、对付某些必要高机能实现的逻辑来说用汇编说话实现大噶?鲱好的选择、对付某些逻辑来说也许只能用汇编来实现。以最后一个手段来说:当我们要实现一个HOOK全部OC要领挪用的逻辑时,由于HOOK的要领不能粉碎原有函数的参数栈,并且还必要在恰当的时辰挪用原始的函数而不存眷原始函数的入参时就只能选择用汇编说话来实现。 查察措施的汇编代码 着实更多的时辰我们不要求去编写一段汇编代码可能呆板指令,而是假如可以或许读懂简朴的汇编代码就能窥伺一些体系底层的实现逻辑和道理。虽然市面上也有许多的反汇编的器材软件可以或许将汇编代码转化为高级说话的伪代码,弱点就是这些器材大多是静态说明器材以及反汇编出来的代码不必然完全正确,偶然辰我们也许越发但愿在运行时去调试可能说明一些题目,这样可以或许阅读汇编代码的话结果会更好一些。 查察汇编代码的三种要领 Xcode提供了三种查察措施汇编代码的方法:
clang呼吁的简朴先容 通过上述的第三种方法查察天生的汇编代码的方法着实是通过clang呼吁完成的。clang是一个C/C++/Objective-C说话的编译器,它包括了预处理赏罚、语法说明、优化、代码天生、汇编装配、链接等成果。我们通过菜单来举办的构建措施的操纵着实内部实现都是借助clang来完成的。你可以在呼吁终端中键入man clang来查察这个呼吁的全部参数和行使先容,你还可以在Xcode工程中行使command + 9快捷键就可以看到你每次构建工程的具体流程,这内里有对措施行使clang呼吁的举办编译和链接的详细实践。 可以看出无论是源代码编译照旧措施链接都是用clang呼吁来实现的,不要被呼吁中大量的编译链接选项所吓倒,其拭魅这些参数都是我们在可视化的工程的Build Settings内里配置的 要想相识完备的编译选项的配置和意义可以参考:pewpewthespells.com/blog/builds… 我们只先容clang呼吁的几个首要的参数选项:
1.通例参数
2.预处理赏罚 -E 源代码文件 -o 输出文件: 对源代码举办预处理赏罚。也就是将全部#include和#import的头文件睁开、将全部宏界嗣魅睁开、将全部列举值转化为常量值的处理赏罚。你可以借助**Product菜单->Perform Action->Preprocess "xxxxx"**来查察一个源代码文件的预处理赏罚功效。 3.天生C++代码 -rewrite-objc 源代码文件: 将OC代码转化为对应的C++说话实现。并在源代码文件的当前目次下天生一个对应的后缀为.cpp的C++代码。你可以通过这种要领来具体相识arc的实现道理、block的实现以及挪用道理、各类OC要害字的实现逻辑道理、OC类属性和要领的实现逻辑、类要领的界说以及runtime的机制等等逻辑。因此用这个参数可以辅佐我们窥伺许多iOS体系的奥秘。在行使这个呼吁时也许会碰着一个常见的错误:
(编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |