Pin简明入门教程

Pin

Intel 推出的跨平台程序插装工具

简明教程

Pin版本:3.2
参考:官方英文教程

插桩主要包括两个工作

  • 在何处插入代码,插入什么样的代码
  • 要在插入点执行什么代码

一些概念

  • Pintools: Pin通过Pintools实现对目标程序的插桩分析,也是用户主要编写,用于完成自定义插桩工作的工具。
  • Traces: 从一个分支开始,到一个无条件跳转分支结束(包括call和return),可以想到的是,traces会从一个分支的入口开始,但可能会有多个出口。
  • BBL: Pin将Traces分割成basic block(BBL),指的是单一入口,单一出口的指令序列,与传统意义上的基本块概念不一致。

举个例子说明BBL与传统基本块的区别,请看下面的代码片段

    switch(i)
    {
        case 4: total++;
        case 3: total++;
        case 2: total++;
        case 1: total++;
        case 0:
        default: break;
    }

显然,在传统的基本块中,我们会认为这里每一个case都代表一个不同的基本块(case 0 不算)。但是回到PIN当中,这里的case显然是有条件跳转,因此会把这整个代码片段认为是一个BBL

  • Image Instruction: 映像级别插桩,使得Pintool在image第一次被加载时就能够监视和插桩整个程序
  • routine: 是procedure,function和subroutine的同义词,所以简单理解为函数就好了。

插桩

Pin插桩有四种模式,

  • Instruction Instrumentation,指令级插桩,使用API INS_AddInstrumentFunction
  • Trace Instrumentation,trace级插桩,使用API TRACE_AddInstrumentFunction
  • Routine Instrumentation, routine级插桩,即函数级插桩,使用API RTN_AddInstrumentFunction
  • Image Instrumentation,映像级别插桩,使用API IMG_AddInstrumentFunction,依赖于符号信息来确定routine边界,因此需要在调用PIN_Init之前调用PIN_InitSymbols

后续内容

慢慢填坑

Q&A

1.使用INS_Address(ins) 打印出的地址怎么跟IDA分析的完全不一样

A:因为INS_Address(ins) 出来的是动态地址

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值