PIN的基本使用

这次来介绍一下pin的基本使用方法,我也是仅仅接触这个工具几天,也许对它的了解还不够深入,所以就把我知道的写出来,大家一起学习进步

Pinsource\tools里面有许多的文件夹,我们可以通过文件夹的名字来大致猜测出它的作用,首先可以找到一个MannualExamples的文件夹,进入,可以看到一堆的cpp文件,还有一个obj-ia32的文件夹(如果是64位的电脑应该是obj-intel64,功能都是一样的)。这个文件夹就应该是存放当前文件中已经编译好的pintools工具,pin主要是利用.dll文件来对二进制代码进行动态追踪,因此我们主要用到的都是这样的.dll文件

如下图:


此时输入pin -help

就会出现它的帮助文档信息,pin的基本用法格式为:

那么下面的就是它的option的选项说明了。

我们暂时先不考虑这些,先使用最简单的。

我在主目录下新建了一个test文件 ,用来进行一些小测试。

那我们先看看ManualExamples文件夹里面的那些工具具体是什么含义

上次用了inscount0.dll我们可以通过打开它的cpp文件来查看它的源代码

可以看到这样的注释:

  // The running count of instructions is kept here

// make it static to help the compiler optimize docount

这样我们就可以猜测这个工具主要就是计算程序运行的指令数目

接着看源代码:

看到KNOB<string> KnobOutputFile(KNOB_MODE_WRITEONCE, "pintool",

"o", "inscount.out", "specify output file name");

这就说明这个文件把获取到的信息输出到了一个文件中,那么就可以通过在命令中加上-o output 这样来选择输出的文件,不过并不是对所有的工具添加这句命令都有用,因为有的工具的源代码中并没有将捕捉到的信息输出到文件中,不过既然有了源代码,那么一切都是有可可能的,我们可以参照inscount0.cpp这个文件中的代码形式来修改其他的cpp文件,再重新编译来获得具有新功能的工具。

说到这里,想必大家也对这个pin的基本使用有了一定的了解把。它不仅提供了许多的工具来供我们自己选择使用,并且还允许用户自定义工具。但是前提就是我们自己能写出工具的cpp文件,那么剩下的就是编译这个工具。在一开始,我联想到了曾经使用过的,都是使用VS2010编译器来生成.dll文件,但是在这里面我们可以发现一个Nmakefile文件。这个文件就是我们接下来要注意的东西了。

首先我们用UE打开它,以ManualExamples中的Nmakefile文件为例:

代码不多,我就直接粘过来了

######################################################################################

# This is the NMAKE file for building and testing PIN toos contained in one of the

# subdirectories of the PinTool project or PIN kit. 

#

# For description of targets and options, see Nmakefile in the root directory.  

######################################################################################

!if "$(PIN_HOME)"==""

PIN_HOME=..

!endif

# Define tools to be buit and tested

######################################################################################

COMMON_TOOLS= inscount0.dll inscount1.dll inscount2.dll proccount.dll imageload.dll \

              staticcount.dll detach.dll pinatrace.dll itrace.dll isampling.dll

# Include building and testing rules from the root Nmakefile. 

######################################################################################

INCLUDE_SUB_RULES=1

!INCLUDE $(PIN_HOME)\Nmakefile 

最上面解释了它的功能,就是编译cpp文件,生成.dll文件,需要更详细的了解它,可以查看根目录下的Nmakefile文件,那里解释的更详细一些。

注意到这句话: Define tools to be buit and tested

下面接着就是COMMON——TOOLS=。。。。了,仔细观察发现的话,我们会注意到这些.dll文件不正式那个obj-ia32文件夹里面的那些吗。因此我有了下面的猜想:

这个脚本文件就是来编译cpp文件的,通过修改这里面的编译信息,可以将自己的cpp文件进行编译生成.dll文件,那么我做了下面的实验

进入目录

cd source\tools\MyPintool 

dir

发现里面有一个MyPinTool,cpp文件,但是没有Nmakefile文件,怎么办,没关系,COPY一个过来。用UE打开,修改下COMMOM_TOOLS后面的内容:

  

这里有一点要注意的就是,如果这后面的工具很多,一行显示不了,那么在换行的时候在末尾加上‘\’。

保存好。

在这个目录下运行下面命令:

即..\nmake tools

那么就会执行当前的Nmakefile文件,对cpp文件进行编译。

这时再看看当前目录的内容就会发现多了一个obj-ia32的文件夹,进去看看发现有4个文件:


我们来测试下这个工具,看看是干嘛的。

我进入自己的测试文件夹test:

运行:

pin -t source\tools\MyPinTool\obj-ia32\MyPinTool.dll -o myPinTool.out -- hello

如:



再看看生成的myPinTool.out文件

可以直接查看type myPinTool.out 

也可以用UE查看



这样就显示结果了

从这数据我认为这个工具的功能是显示该二进制文件的指令条数,基本模块个数,以及线程个数

好了,基本的从一个cpp文件生成.dll文件并且使用这个pintools的基本流程我们已经了解了。接下来就是试试每个工具,看看有什么其他发现!

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值