pin tool 各个工具分类及作用:

 insount0                        记录指令执行的次数

 inscount                        记录指令执行的次数,与inscount0不同的是,它分BBL块记录然后累加

 itrace                              记录每个指令地址

pinatrace                        记录指令读取和写入的内存地址

imageload                      image载入或卸载时打印一条信息,image指与程序有关的所有数据结构(windows下是dll、exe)

proccount                       记录routine的数目和一个routine中指令执行的次数

safecopy                         记录程序从内存中复制信息到寄存器的指令

invocation                       说明和程序都有点暧昧,暂时没看懂

malloctrace                    输出malloc()和free()的输入参数以及malloc()的返回值

下面以malloctrace工具为例对pintool代码进行说明:

    前面已经说过,了解pintool的自定义函数是看懂其代码的关键,pintool的主函数可分为三个部分,输出文件建立部分、程序检测函数部分和结尾部分(忽略最后一句)。

输出文件建立部分确定输出文件的格式和说明内容,程序检测函数部分调用各函数对可执行程序进行检测,结尾部分一般为其自定义的Fini函数,用来做将检测数据写入输出文件、关闭文件等的收尾工作。

    显然,第二部分是最重要的一部分,从前面声明的函数可知,

IMG_AddInstrumentFunction函数调用Image函数,Image函数的参数为要监测的image,若image中含有malloc函数,则RTN_InsertCall函数一次调用Arg1Bfore和MallocAfter函数,这两个函数实现我们所要的输出,注意前面定义的写入文件的函数,这里是我们想要的输出,InsertCall函数调用这些写入函数,了解这些规律就很容易看懂这些代码。






#include "pin.H"
#include <iostream>
#include <fstream>/* ===================================================================== */
/* Names of malloc and free */
/* ===================================================================== */
#if defined(TARGET_MAC)
#define MALLOC "_malloc"
#define FREE "_free"
#else
#define MALLOC "malloc"
#define FREE "free"
#endif/* ===================================================================== */
/* Global Variables */
/* ===================================================================== */std::ofstream TraceFile;/* ===================================================================== */
/* Commandline Switches */
/* ===================================================================== */KNOB<string> KnobOutputFile(KNOB_MODE_WRITEONCE, "pintool","o", "malloctrace.out", "specify trace file name");/* ===================================================================== */
/* Print Help Message                                                    */
/* ===================================================================== */INT32 Usage()
{cerr <<"This tool produces a trace of calls to malloc.\n""\n";cerr << KNOB_BASE::StringKnobSummary();cerr << endl;return -1;
}/* ===================================================================== */VOID Arg1Before(CHAR * name, ADDRINT size)
{TraceFile << name << "(" << size << ")" << endl;
}/* ===================================================================== */VOID MallocAfter(ADDRINT ret)
{TraceFile << "  returns " << ret << endl;
}/* ===================================================================== */VOID Image(IMG img, VOID *v)
{RTN mallocRtn = RTN_FindByName(img, MALLOC);if (RTN_Valid(mallocRtn)){RTN_Open(mallocRtn);RTN_InsertCall(mallocRtn, IPOINT_BEFORE, (AFUNPTR)Arg1Before, IARG_ADDRINT, MALLOC, IARG_G_ARG0_CALLEE, IARG_END);RTN_InsertCall(mallocRtn, IPOINT_AFTER, (AFUNPTR)MallocAfter, IARG_G_RESULT0, IARG_END);RTN_Close(mallocRtn);}RTN freeRtn = RTN_FindByName(img, FREE);if (RTN_Valid(freeRtn)){RTN_Open(freeRtn);RTN_InsertCall(freeRtn, IPOINT_BEFORE, (AFUNPTR)Arg1Before, IARG_ADDRINT, FREE, IARG_G_ARG0_CALLEE, IARG_END);RTN_Close(freeRtn);}
}/* ===================================================================== */VOID Fini(INT32 code, VOID *v)
{TraceFile.close();
}/* ===================================================================== */
/* Main                                                                  */
/* ===================================================================== */int main(int argc, char *argv[])
{PIN_InitSymbols();if( PIN_Init(argc,argv) ){return Usage();}TraceFile.open(KnobOutputFile.Value().c_str());TraceFile << hex;TraceFile.setf(ios::showbase);cout << hex;cout.setf(ios::showbase);    IMG_AddInstrumentFunction(Image, 0);PIN_AddFiniFunction(Fini, 0);
// Never returnsPIN_StartProgram();return 0;
}/* ===================================================================== */
/* eof */
/* ===================================================================== */
												

pin ——pin tool代码注释 各pin tool的用途相关推荐

  1. RT-Thread pin设备驱动代码结构剖析

    硬件测试平台:正点原子潘多拉STM32L4开发板 OS内核版本:4.0.0 注意:下面的示例代码是从原子提供的例程中摘录,因此可能与最新的RT-Thread源码有出入(因为RT-Thread源码在不断 ...

  2. Linux内核中的GPIO系统之(3):pin controller driver代码分析

    一.前言 对于一个嵌入式软件工程师,我们的软件模块经常和硬件打交道,pin control subsystem也不例外,被它驱动的硬件叫做pin controller(一般ARM soc的datash ...

  3. pin controller driver代码分析

    一.前言 对于一个嵌入式软件工程师,我们的软件模块经常和硬件打交道,pin control subsystem也不例外,被它驱动的硬件叫做pin controller(一般ARM soc的datash ...

  4. 『WIN11』出现问题,你的PIN不可用,请重置PIN,无限循环解决

    自己配的主机 TUF B450M PRO GAMING + R5 3600大雕 前两天换了张GTX1650 然后--就点不亮了 逐步排查时扣了主板电池以重置BIOS 最后发现是内存条没插好 终于点亮进 ...

  5. 开发规范-java代码注释及IDEA配置代码注释模板

    引(阿里巴巴开发规范-注释规约) [强制]类.类属性.类方法的注释必须使用 Javadoc 规范,使用/*内容/格式,不得使用 // xxx 方式. 说明:在 IDE 编辑窗口中,Javadoc 方式 ...

  6. 【代码注释】浅谈对于代码注释的理解

    楔子:"这里的山路十八弯,这里的水路九连环":智慧的古人就懂得,通过把山路修成九曲十八弯来战胜陡峭的高坡.看则舍近求远绕圈而行,实为拿路程换高度,为完成登顶而蓄势待发.这种螺旋上升 ...

  7. Zed-Unity插件代码注释——ZEDCommon.cs

    文章目录 Zed-Unity插件代码注释--ZEDCommon.cs Update 引言 基础环境 ZEDCommon.cs脚本介绍 代码(注释后) Zed-Unity插件代码注释--ZEDCommo ...

  8. 归并排序(代码注释超详细)

    归并排序: (复制粘贴百度百科没什么意思),简单来说,就是对数组进行分组,然后分组进行排序,排序完最后再整合起来排序! 我看了很多博客,都是写的8个数据呀什么的(2^4,分组方便),我就想着,要是10 ...

  9. 代码注释//_您应该停止编写//的五个代码注释,并且//应该开始的一个注释

    代码注释// 提供来自您最喜欢和最受欢迎的开源项目的示例-React,Angular,PHP,Pandas等! (With examples from your favorite and most p ...

最新文章

  1. Android通过ksoap2调用.net(c#)的webservice
  2. mysql crm动态列设计_值得收藏:一份非常完整、详细的MySQL规范
  3. 一天搞定CSS:css选择器--07
  4. 读取文件慢_页面缓存(Page Cache)-内存和文件之间的那点事儿(下)
  5. 《从零构建前后分离的web项目》准备 - 前端了解过关了吗?
  6. leetcode230. 二叉搜索树中第K小的元素(中序遍历)
  7. linux curl命令验证服务器断点续传支持
  8. Struts里面的配置笔记
  9. windows 2008 R2远程桌面无法本地复制文件到远程解决
  10. java中文乱码decode_JAVA中文字符乱码解决详解
  11. unity scence灯光不显示_Unity基础教程系列(四)——多场景(Loading Levels)
  12. SQL SERVER插件之SQLPrompt 激活使用
  13. 2.1 数值分析: 顺序Gauss消去法
  14. 论文笔记:Attention U-Net: Learning Where to Look for the Pancreas
  15. 低成本5W无线充电器方案FS68001B简便充电芯片
  16. 操作系统课设之单线程版
  17. String Reduction
  18. 电子设计教程50:16*16LED点阵屏驱动-LED点阵屏工作原理
  19. 测试u盘内存的软件,memtest86+-2.11内存测试、测速软件
  20. 计算机主板有没有寿命,主板能用几年_主板的使用寿命是多久图文教程

热门文章

  1. 微信绑定会员卡服务器出错,会员卡信息更新失败
  2. 曼谷这些旅游景点文化地标推荐
  3. 网页中LRC歌词同步显示
  4. 【保密知识】排查失泄密隐患 防控保密风险点
  5. 华为云3年仍未超阿里云,任正非感叹:积天下英雄,为何不得天下
  6. ins07001 oracle,社区
  7. 中国通信服务股份有限公司之广通服的划分!
  8. 我的世界服务器自动刷矿机,我的世界刷矿机MOD
  9. ecshop数据结构
  10. 将 MP3 转成 PCM 并使用 AudioTrack 播放