这篇文章主要介绍一下Intel Pin在JIT模式和Probe模式下对库换数的替换,以及实现中有哪写需要注意的地方。
JIT模式就是对插桩的代码进行即时编译,然后缓存起来使用
Probe模式就是在要插桩的函数入口前面插入一条跳转指令,跳转到新的替换函数处执行,不在原来执行代码上进行修改
具体的大家可以参考Pin官方手册
https://software.intel.com/sites/landingpage/pintool/docs/65163/Pin/html/index.html
下面进入正文
在编写程序过程中,我们有时候需要需要关注一下某些库函数的调用,方便我们我们监测。比如我们想关注应用程序中共享变量的情况,共享变量主要就是静态变量,全局变量,以及堆变量(new或是malloc或是realloc或是calloc),以堆变量为例,我们就必须要监测malloc等函数,GCC中提供了LD_PRELOAD预加载库技术,通过这种技术,我们可以对一些库函数进行重写,然后在链接的时候首先加载我们自己写的动态链接库,后面加载正常的库函数时候由于符号表中已经有了我们重写的函数,那么就不会重定位到真正的库函数的位置。这篇文章主要使用Intel的Pin 二进制动态插桩框架来达到同样的效果,如果对Pin不了解的同学建议去看一下上面给出的手册链接。
使用JIT进行的malloc函数替换,根据代码解释
#include "pin.H"
#include <string.h>
#include <iostream>
using namespace std;
void * MallocWrapper( CONTEXT *