linux库打桩技术

以下摘抄自csapp《深入理解计算机系统》

Linux链接器支持一个很强大的技术,称为库打桩,它允许你截获对共享库函数的调用,取>而代之执行 自己的代码。使用打桩机制,你可以追踪对某个特殊库函数的调用次数,验证和追踪它的输入和输出值,甚至把它替换成一个完全不同的实现。

下面是它的基本思想:给定一个需要打桩的目标函数,创建一个包装函数,它的原型与目标
函数完全一样。使用某种特殊的打桩机制,你就可以欺骗系统调用包装函数而不是目标函数
了,包装函数通常会执行它自己的逻辑,然后调用目标函数,再将目标函数的返回值传递给 调用者。

打桩可以发生在编译时,链接时或当程序被加载和执行的运行时。下面的例子 调用c标准库 中的malloc
和free函数,我们的目标是用打桩来追踪程序运行时对malloc和free的调用。

  • 编译时打桩

  • 链接时打桩

  • 运行时打桩

    • 编译时打桩需要能够访问程序的源代码,链接时打桩需要能够访问程序的可重定位对象文件
      ,不过有一种机制能够在运行时打桩,它只需要能够访问可执行目标文件,这个机制基于动
      态链接器的LD——PRELOAD环境变量。

    • 如果LD——PRELOAD环境变量被设置为一个共享库路径名的列表那么当你加载和执行一个程序,需要解析未定义的引用时,动态链接器会先搜索LD——PRELOAD库,然后才搜索任何其他库,有了这个机制,当你加载和执行任意可执行可执行文件时,可以对任何共享库中的任何函数打桩。

你可能感兴趣的:(逆向学习之链接,学习记录)