symbol stub
符号打桩
把我们的应用程序,
编译成汇编代码,
执行外部库的函数,
就成了跳转地址 ( symbol stub )
debug, 按住 ctrl,
以汇编代码的语句,单步执行
debug, 没有按住 ctrl,
以高级语言的语句,单步执行
走外部函数,就会走外部函数的桩 ( stub )
桩里面的代码,
指向一个新的地址,是用来寻址的
走外部函数,先找到一个桩,
运行桩里面的代码,( 是一个偏移值 )
在懒加载符号表里面
( lazy Symbol Pointers )
懒加载符号表, Lazy Symbol Pointers
例如: Foundation 中的 NSLog
直接加载符号表, Non-Lazy Symbol Pointers
dyld_stub_binder
( 我只看见一个 )
指针在 arm 64 里面,占 8 个字节
外部函数 ( 系统库,三方库的执行 ),
-
第一次执行,有一个绑定
-
后来的执行,
绑定后,外部函数的地址,发生了改变
本文探讨了应用程序如何通过符号打桩(symbolstub)与外部库交互,详细解释了在debug模式下,按住Ctrl时以汇编代码单步执行,不按Ctrl时以高级语言执行的过程。在外部函数调用中,桩代码指引执行路径,并在懒加载符号表中查找地址。首次执行外部函数会进行绑定,之后的执行则直接使用已绑定的地址。dyld_stub_binder在其中扮演关键角色,负责动态绑定。整个过程揭示了程序执行与系统库、三方库之间的紧密联系。
1624

被折叠的 条评论
为什么被折叠?



