链接器的输出为可执行文件。可以在链接器上做事情,加载器是运行前置,加载器也可以做很多事情。
动态链接,在加载器加载可执行文件时,先加载和运行动态链接器,然后动态链接器动态链接共享库。用于解决静态库的缺点,即全量加载库,浪费内存。依赖库更新后,需要重新编译打包发版,非常麻烦。
Linux操作系统提供dlopen,dlsym,dlclose,dlerror系统函数,用于动态链接。动态链接器调用了dlopen从磁盘加载共享库,调用dlsym,从共享库找到引用的符号并返回符号指针,即全局变量和全局函数。
JNI,java本地接口,就是动态链接共享库。
库打桩,就是库代码入侵。可追踪库代码的执行。就像GPS。java agent代理,就类似于库打桩。
编译器链接器提供了用户代码的打桩机制。



