标签: intel-pin

英特尔针脚:检测运行过程

我创建了一个简单的pin工具,可以转储任何win32 CreateFileW调用.它工作正常,但当我尝试将它附加到已经运行的进程时,该过程只是终止.尝试了几个应用程序(记事本,wordpad,Internet Explorer),相同的结果.这是我使用的命令:

.\pin -pid 8804 -t dumpfile.dll
Run Code Online (Sandbox Code Playgroud)

我有一个提示尝试关闭多线程,如下所示:

.\pin -mt 0 -pid 8804 -t dumpfile.dll
Run Code Online (Sandbox Code Playgroud)

但它没有帮助.还尝试了另一个,开箱即用的pintool,也没有工作,所以问题不在我的pintool.有任何想法吗?

提前致谢!

c++ x86 instrumentation intel intel-pin

8
推荐指数
1
解决办法
2057
查看次数

用于跟踪 CreateFile 调用的 Pin 工具

我制作了一个 pin 工具来转储 CreatFile win32 调用(在我的例子中为 CreateFileW)及其返回值。它看起来像这样:

/* ... */

VOID Image(IMG img, VOID *v)
{
    RTN cfwRtn = RTN_FindByName(img, "CreateFileW");
    if (RTN_Valid(cfwRtn))
    {
        RTN_Open(cfwRtn);
    
        RTN_InsertCall(cfwRtn, IPOINT_BEFORE, (AFUNPTR)CreateFileWArg,
        IARG_ADDRINT, "CreateFileW",
        IARG_FUNCARG_ENTRYPOINT_VALUE, 0,
        IARG_END);
        RTN_InsertCall(cfwRtn, IPOINT_AFTER, (AFUNPTR)CreateFileWafter,
        IARG_FUNCRET_EXITPOINT_VALUE, IARG_END);

        RTN_Close(cfwRtn);
    }
}

/* ... */

VOID CreateFileWArg(CHAR * name, wchar_t * filename)
{
    TraceFile << name << "(" << filename << ")" << endl;
}

VOID CreateFileWafter(ADDRINT ret)
{
    TraceFile << "\tReturned handle: " << ret << endl;
}
Run Code Online (Sandbox Code Playgroud)

它给出了有趣的结果。例如,在一个只打开现有文件而不执行其他操作的小程序上,它给出:

CreateFileW(file.txt) …
Run Code Online (Sandbox Code Playgroud)

c++ winapi intel-pin

5
推荐指数
1
解决办法
2368
查看次数

英特尔引脚获取功能参数编号

我正在尝试使用Pin编写函数调用跟踪器.它可以打印每个函数调用以及每个参数的值.

困难在于获得函数的所有参数.使用RTN_InsertCall,您可以将函数参数传递给检测代码:

intel pin RTN_InsertCall多个函数参数

但是,您需要知道当前例程的参数数量.有没有办法做到这一点?

谢谢!

c++ intel intel-pin

5
推荐指数
1
解决办法
1335
查看次数

如何使用Intel Pin工具生成分支机构列表?

我相对较不熟悉使用英特尔Pin工具进行代码检测,并且正在尝试研究分支预测。具体来说,我想生成所有分支的列表,它们的分支目标以及是否采用它们。我知道SimpleExamples中有用于生成内存地址跟踪的pintool,例如“ pinatrace.cpp”工具,但是我看不到任何适合列出分支的需求的工具。

我可以在示例中使用的某个地方存在现有的pintool,还是需要编写一个新的pintool?

我在Linux计算机上使用pin-2.14。

谢谢!

linux cpu-architecture instructions intel-pin

5
推荐指数
1
解决办法
1149
查看次数

英特尔引脚与 C++14

问题

我对 Intel Pin 与 C++14 或其他 C++ 版本的使用有一些疑问。

  • 用较新的版本从旧的 C++ 编译代码很少有任何问题,但由于 Intel Pin 是操纵指令级别的,如果我用 C++11 或 C++14 编译它,是否会出现任何不良副作用?
  • 如果可以使用 C++11 或 C++14 进行编译,我该如何制定规则以仅为我的工具启用更新版本的 C++?
  • 如果可能,如何将 GCC/G++ 默认 C++ 版本设置为最新版本,并且在这样做时我应该记住什么?

情况

我正在构建一个动态调用图 pin 工具。为了便于理解,我正在计算调用堆栈的深度。为了安全起见,我决定用std::mutex. 这让我遇到了std::mutex自 C++11 以来才可用的问题,这不是我机器中的 Intel Pin 默认值。

$ g++ -v
[...]
gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.2)
Run Code Online (Sandbox Code Playgroud)

编译命令:

$ make obj-intel64/callgraph.so
[...]
error: #error This file requires compiler and library support for the ISO C++ 2011 standard. This support must be enabled …
Run Code Online (Sandbox Code Playgroud)

c++ gcc c++11 intel-pin c++14

5
推荐指数
1
解决办法
2350
查看次数

使用 intel pintool 记录所有指令

我写了这个pintool:

#include "pin.H"
#include <iostream>
#include <fstream>

VOID Instruction(INS ins, VOID *v)
{
        cout << INS_Disassemble(ins) << endl;
}

VOID Fini(INT32 code, VOID *v)
{
        cout << "Fin" << endl;
}

int main(int argc, char *argv[])
{
    if( PIN_Init(argc,argv) )
    {
            cout << "Erreur PIN_Init" << endl;
            return 0;
    }

    INS_AddInstrumentFunction(Instruction, 0);
    PIN_AddFiniFunction(Fini, 0);
    PIN_StartProgram();

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我正在打印所有说明。我现在要做的是显示指令地址(EIP)

我怎样才能做到这一点 ?

谢谢

intel-pin

5
推荐指数
1
解决办法
2160
查看次数

如何指定代码区域以通过 pintool 对其进行检测?

Pin中有四个粒度级别:例程、指令和图像、跟踪。我可以指定一个限制/区域来开始和停止插入检测代码。可以通过类似指令(#start instrumentation,#end instrumentation)或类似的东西,

一个例子:
for( int i=0; i< x; i++) { #startInstrumentation for( ....;.....;.....) { // some code // function call, conditions , loops, .... } #endInstrumentation }
有没有办法做到这一点?

intel-pin

4
推荐指数
1
解决办法
2162
查看次数

编译带有依赖项的 PIN 工具

正如标题所述,我正在寻找一种方法来编译我的具有某些依赖项的 PIN 工具。例如,如果我#include "somefile.h"在我的 PIN 工具中生成一些目标文件g++ -c somefile.cpp,我如何链接我的目标文件以使用我的 PIN 工具进行编译,以便我可以在我的 PIN 工具中使用它的功能?

c++ linux g++ intel-pin

3
推荐指数
1
解决办法
1197
查看次数

intel pin工具中图像的含义

我是Intel pin tool的新手,最近开始研究pin tool。在教程中,它描述了 pin 工具的模式:

但是,有时查看与跟踪不同的粒度会很有用。为此,Pin 提供了两种附加模式:图像和常规仪器。这些模式是通过“缓存”检测请求来实现的,因此会产生空间开销,这些模式也称为提前检测。

我想知道“形象”是什么意思。

谢谢你。

intel-pin

2
推荐指数
1
解决办法
852
查看次数