pin ——pin tool代码注释 各pin tool的用途
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的用途相关推荐
- RT-Thread pin设备驱动代码结构剖析
硬件测试平台:正点原子潘多拉STM32L4开发板 OS内核版本:4.0.0 注意:下面的示例代码是从原子提供的例程中摘录,因此可能与最新的RT-Thread源码有出入(因为RT-Thread源码在不断 ...
- Linux内核中的GPIO系统之(3):pin controller driver代码分析
一.前言 对于一个嵌入式软件工程师,我们的软件模块经常和硬件打交道,pin control subsystem也不例外,被它驱动的硬件叫做pin controller(一般ARM soc的datash ...
- pin controller driver代码分析
一.前言 对于一个嵌入式软件工程师,我们的软件模块经常和硬件打交道,pin control subsystem也不例外,被它驱动的硬件叫做pin controller(一般ARM soc的datash ...
- 『WIN11』出现问题,你的PIN不可用,请重置PIN,无限循环解决
自己配的主机 TUF B450M PRO GAMING + R5 3600大雕 前两天换了张GTX1650 然后--就点不亮了 逐步排查时扣了主板电池以重置BIOS 最后发现是内存条没插好 终于点亮进 ...
- 开发规范-java代码注释及IDEA配置代码注释模板
引(阿里巴巴开发规范-注释规约) [强制]类.类属性.类方法的注释必须使用 Javadoc 规范,使用/*内容/格式,不得使用 // xxx 方式. 说明:在 IDE 编辑窗口中,Javadoc 方式 ...
- 【代码注释】浅谈对于代码注释的理解
楔子:"这里的山路十八弯,这里的水路九连环":智慧的古人就懂得,通过把山路修成九曲十八弯来战胜陡峭的高坡.看则舍近求远绕圈而行,实为拿路程换高度,为完成登顶而蓄势待发.这种螺旋上升 ...
- Zed-Unity插件代码注释——ZEDCommon.cs
文章目录 Zed-Unity插件代码注释--ZEDCommon.cs Update 引言 基础环境 ZEDCommon.cs脚本介绍 代码(注释后) Zed-Unity插件代码注释--ZEDCommo ...
- 归并排序(代码注释超详细)
归并排序: (复制粘贴百度百科没什么意思),简单来说,就是对数组进行分组,然后分组进行排序,排序完最后再整合起来排序! 我看了很多博客,都是写的8个数据呀什么的(2^4,分组方便),我就想着,要是10 ...
- 代码注释//_您应该停止编写//的五个代码注释,并且//应该开始的一个注释
代码注释// 提供来自您最喜欢和最受欢迎的开源项目的示例-React,Angular,PHP,Pandas等! (With examples from your favorite and most p ...
最新文章
- Android通过ksoap2调用.net(c#)的webservice
- mysql crm动态列设计_值得收藏:一份非常完整、详细的MySQL规范
- 一天搞定CSS:css选择器--07
- 读取文件慢_页面缓存(Page Cache)-内存和文件之间的那点事儿(下)
- 《从零构建前后分离的web项目》准备 - 前端了解过关了吗?
- leetcode230. 二叉搜索树中第K小的元素(中序遍历)
- linux curl命令验证服务器断点续传支持
- Struts里面的配置笔记
- windows 2008 R2远程桌面无法本地复制文件到远程解决
- java中文乱码decode_JAVA中文字符乱码解决详解
- unity scence灯光不显示_Unity基础教程系列(四)——多场景(Loading Levels)
- SQL SERVER插件之SQLPrompt 激活使用
- 2.1 数值分析: 顺序Gauss消去法
- 论文笔记:Attention U-Net: Learning Where to Look for the Pancreas
- 低成本5W无线充电器方案FS68001B简便充电芯片
- 操作系统课设之单线程版
- String Reduction
- 电子设计教程50:16*16LED点阵屏驱动-LED点阵屏工作原理
- 测试u盘内存的软件,memtest86+-2.11内存测试、测速软件
- 计算机主板有没有寿命,主板能用几年_主板的使用寿命是多久图文教程