问题标签 [intel-pin]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
946 浏览

c++ - 调试 PIN 工具 add-symbol-file 不起作用

要调试使用 PIN 工具的模拟器,通过使用 2 个不同的终端窗口,我执行以下操作:

在另一个窗口中,我执行以下操作:

在某些时候,引脚工具冻结,我手动向引脚工具发送中断信号并尝试在附加窗口上对其进行调试。为了了解在哪一行 pin 实现卡住,我尝试了 backtrace 命令,但即使添加了符号文件,它也会返回问号。

我在这里找不到错误的方法。请你帮助我好吗?

0 投票
0 回答
239 浏览

c++ - 使用 PIN 获取符号地址

我正在测试符号的 PIN 支持。我有以下代码:

}

基本上,我正在解析我的可执行文件的所有加载图像以及每个图像的所有符号。对于每个符号,我打印图像的名称、地址、名称和值。
我的目标是在这里使用后面的代码部分来检索从符号名称开始的符号地址。
但是,程序没有正确打印信息:符号名称为(null),值和地址设置为 0。图像名称正确显示。我究竟做错了什么?

0 投票
1 回答
744 浏览

intel-pin - 如何在 intel pintool 的特定例程中迭代基本块?

我试图在特定例程中迭代基本块,但我发现了一些问题:

错误:不推荐使用的声明,

我该如何解决该错误,或​​者通过其他方式来解决?

0 投票
1 回答
2037 浏览

profiling - 使用 pin 工具的内存访问跟踪

我只是在使用英特尔的 pin 工具时遇到了问题。我想要一个 c++ 程序的内存访问跟踪,并为此使用它。首先,我使用运行 c++ 程序(./a.out)

现在在 c++ 中,我还打印了每个变量的地址。现在,当我用文件输出的实际变量名替换 pin 生成的文件中的所有地址时,它给了我错误的顺序。

例如,对于一个 sum 程序,其中添加了变量 'a' 和 'b' 并将结果存储在 'c' 中并打印在控制台上(只是一个小的 5 行代码),在由 pin 'b' 生成的文件中存在 150 次并且“a”存在 33 次,“c”存在 3 次。但在代码中,所有变量的引用不超过两次。如何获得实际的内存访问跟踪。任何人都可以帮助我,请真的很感激。

0 投票
1 回答
1145 浏览

intel-pin - 如何在 pintool 中获取数组的内存有效地址?

我尝试打印数组的内存位置(有效地址),我发现以下内容:

1- 第一种方式:使用(以读取操作为例)
IARG_MEMORYREAD_EA
作为分析函数的参数并在此函数中打印此值,(内存读取的有效地址,仅在 INS_IsMemoryRead 为真且在 IPOINT_BEFORE 时有效。)

2-第二种方式:通过插入回调:

INS_OperandMemoryDisplacement(INS ins,UINT32 n)
INS_OperandMemoryBaseReg(INS ins,UINT32 n)
INS_OperandMemoryIndexReg(INS ins,UINT32 n)
INS_OperandMemoryScale(INS ins,UINT32 n)

返回位移、基址寄存器、索引寄存器和用于在内存中寻址的比例值操作数,并通过以下公式计算有效地址:

有效地址 = Displacement + BaseReg + IndexReg * Scale

它们之间有什么区别,实现这一目标的最佳方法是什么?

0 投票
0 回答
182 浏览

c++ - 带有 python 的 PIN 包括工具。模棱两可的符号

我和这篇文章有同样的问题。

基本上我正在尝试编译一个使用Python.h.

有一些类型被称为相同的Windows.hPIN.h并且它们中的任何一个都为它们声明了一个命名空间,所以我得到error C2872: 'UINT32' : ambiguous symbol 问题是我的 PIN 工具导入PIN.hPython.h(同时导入Windows.h)并且它们都有相同的名称类型所以编译器不知道每个是什么类型,我得到了模棱两可的符号错误

我不能使用解决方案:

或者

因为对它们的引用太多需要重命名,这将是一团糟(PIN 和 Windows.h 库使用UINT32CONTEXT很多次)。

有什么优雅的方法可以解决这个问题吗?

0 投票
1 回答
1422 浏览

c++ - 线程之间的共享内存

我使用 Intel 工具Pin对 Linux 上的多线程进程进行检测,并监控线程之间的共享内存访问,我在其中开发了一个工具Pin来记录共享内存地址,Pin 中的检测代码如下:

该函数用于在读写内存时记录线程的信息和内存地址,我在这个函数中使用了锁RecordMemRead。 我想记录线程间共享的内存地址,比如全局变量或者堆内存。 但是当我使用一个简单的多线程程序来测试我的工具时。测试如下。在这个程序中,用户没有定义任何共享变量或共享内存:RecordMemWrite


结果表明多线程访问的内存,并在下一行输出内存访问指令的调试信息:

结果表明两个线程都有一些内存访问,并且读/写指令没有调试信息(我在编译时添加了 -g 选项),所以这些内存可能被库访问
Q1:什么线程用这些记忆?
Q2:如果我只想监控用户定义的内存,而不是库中定义的,如何区分?

0 投票
1 回答
840 浏览

linux - 为什么某些回调函数不能在 Pin 中调用?

我在 Linux 中pthread_mutex_lock使用Intel-Pin 进行检测。pthread_mutex_unlock我分别在这两个锁函数的调用之前和之后插入函数,所以我希望该工具会在锁函数之前和之后输出字符串。
仪器代码如下

编译这个工具

使用此工具进行简单测试

编译这个测试

最后,我使用我的工具来检测这个测试

结果是

可以看到没有Pthread_mutex_unlock_callAfter,我在pthread_mutex_unlock后面插入了一个函数,为什么这个函数没有被调用?
PS:Pin API 说

0 投票
1 回答
485 浏览

architecture - 什么指令'instCount'引脚工具计数?

我在基本 C 程序上运行 pintool 'instCount',主函数中的主体为空。

int main() {

}

当我在这个程序可执行文件上运行 instCount 时,它显示了大约 86000 条指令。即使程序很小,为什么会生成这么多指令..??知道吗??

谢谢

0 投票
2 回答
1402 浏览

gcc - 在 X86 代码中插入一条未定义的指令以供 Intel PIN 检测

我正在使用基于PIN的模拟器来测试一些新的架构修改。我需要使用我的模拟器测试带有两个操作数(一个寄存器和一个内存位置)的“新”指令。

由于使用 GCC 机器描述仅添加一条指令很乏味,因此使用 NOP 或未定义指令似乎是合乎逻辑的。PIN可以很容易地使用 检测 NOP 指令INS_IsNop,但它会干扰自然添加到代码中的 NOP,它也没有操作数或单个内存操作数。

剩下的唯一选择是使用未定义的指令。未定义的指令永远不会干扰代码的其余部分,并且可以通过PIN使用INS_IsInvalid.

问题是我不知道如何使用 GCC 内联汇编添加未定义的指令(带有操作数)。我怎么做?