7.13 库打桩机制
库打桩:允许截获对共享库的调用,转而执行自己的代码。使用这个机制可以追踪某个特殊库函数的调用次数,验证和追踪它的输入和输出值,或者替换它。
需要创建一个包装函数,原型和目标函数完全一样。通常包装函数执行自己的逻辑,然后调用目标函数,再返回目标函数。
打桩可以发生在编译时,链接时,加载时和运行时。
编译时打桩:打桩的编译器参数:P492
链接时打桩
编译时打桩需要能访问程序的源代码,链接时打桩需要能够访问程序的可重定位对象文件,运行时打桩需要能够访问可执行目标文件。
运行时打桩基于链接器的LD_PRELOAD环境变量,它被设置为一个共享库路径名的列表。解析未定义的引用时,动态链接器优先搜索这个库。
(有时间试试链接时打桩和运行时打桩)
7.14 处理目标文件的工具
AR、NM、SIZE、READELF、LDD
定义见书P496