问题标签 [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 回答
683 浏览

memory - 使用 Intel 的 PinTool 获取堆栈指针内容

使用 objdump 实用程序,我们能够检索变量的相对地址,例如考虑一个简单的 C 程序:源代码:

使用 gcc 编译:

$ gcc -g 示例.c -o 示例

运行带有 dwarf 标志的 objdump 实用程序以获取 ELF 信息。

$objdump --dwarf=info 示例

输出:

我想做如下: -

  1. 我想检索一个变量的地址,比如 my_local。首先,我将查看 DW_TAG_Variable,然后查看 DW_AT_name、DW_AT_location,它们由基址寄存器从顶部的函数 -20 处给出。

问题:如何在运行时知道基址寄存器的内容。我们可以使用 PinTool 来实现它吗?

更广泛意义上的问题:我想要变量 my_local 映射到内存中的哪个地址给定来自 dwarf 和 Pintool 的信息。

提前致谢。

0 投票
1 回答
57 浏览

c++ - PIN 3.0 编译错误,因为 '__value' 符号

我正在使用 Visual c++ 2012 将我的工具移植到 PIN 3.0,因为我现在拥有 Windows 10。我遵循了此处提供的移植指南

但是,我遇到了一个错误:

打开此 /clr:oldSyntax 选项时,加上添加 RTTI 可用性(/GR 而不是 /GR-),否则它与 /clr:oldSyntax 不兼容,我或多或少会遇到相同的问题:

此错误位于文件 type_trait.h(PIN 3.0 库的头文件)中

这是一个常见问题吗?如果是,有什么解决方法吗?还是我错过了移植指南中的某些内容?我了解此 PIN 3.0 标头中引入的名称 __value 存在冲突。

0 投票
1 回答
626 浏览

docker - 带 docker 的英特尔 pin

我有一个使用以下命令正常运行的 pintool:

我想myexcecutable放置一个使用此命令运行的docker 程序:

当我尝试简单地用-- obj-intel64/myexecutabledocker 命令替换时,pintool 正常启动但没有正常完成。

我相信我的 pintool 附加到 docker,而不是包含在我的目标的包含应用程序中。

我是否必须采用不同的方法才能将我的 pintool 正确附加到在 docker 容器中运行的程序中?

0 投票
1 回答
110 浏览

docker - 没有码头工人的码头工人

我正在尝试执行一些 docker 容器,而没有 docker 本身!!!

也许你知道CloudSuite Benchmarks。我正在尝试在没有 Docker 的情况下运行MediaStreaming(我需要可执行文件而不是容器,因为我必须通过使用可执行文件的英特尔 pintool 运行它们)

我使用了export这样的指令:

docker export streaming_server > server.tar.gz

然后我解压缩了 tar 文件。我不确定,下一步我应该做什么。正如您在链接上看到的那样,事情变得越来越棘手。我必须执行这样的事情:

docker run -d --name streaming_server --volumes-from streaming_dataset --net streaming_network cloudsuite/media-streaming:server

任何想法如何做到这一点?我确实先尝试过,hello-wolrd但事情更容易,解压缩后,我只有一个可执行文件,现在我不知道该怎么做。

提前致谢!

0 投票
1 回答
2496 浏览

c++ - 带有 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 默认设置。

编译命令:

编辑

我设法制定了一个定义 C++11 版本的构建规则,但它中断了。通过 make 发送给 g++ 的命令是

这不编译。相反,它将落入 STL 标头内的巨大错误日志中。似乎 Pin 带有它自己的 STL 子集,与 C++11 和 C++14 冲突。我已经上传了g++ 输出的粘贴。它填充了 2331 行,但我注意到它访问的文件夹中有这个奇怪的东西。STL 库包含在2 个不同的目录中:

  • /usr/include/c++/5/
  • /home/gabriel/Downloads/pin-3.0-76991-gcc-linux/extras/stlport/include/

一个一个地解决错误是不可行的,删除pin stl端口可能是一个更糟糕的主意。如果可以将 Pin 与较新的 C++ 一起使用,我想说简单std=c++1y不是办法。

0 投票
2 回答
539 浏览

c++ - 使用 Pin 的 malloc 跟踪中的行号

我正在使用 Pintool 来跟踪 malloc/free 操作。从 ManualExamples/malloc_trace.cpp 我能够在示例代码中打印出 malloc/free。

我想知道是否有办法在遇到 malloc/free 的源代码中打印行号。在以下检测 malloc 的 malloctrace.cpp 中,我可以添加任何参数或另一个调用来打印行号。

在 DebugTrace.cpp 中,我看到有一个函数

可以打印 RTN 的行号。有没有办法使用这个函数来获取 malloc 的行号?

// 已编辑

我写了一个新函数

我正在调用我的主要功能

这是使用“GetSourceLocation”函数的正确方法吗?我试过了,它编译得很好,但不打印行号。

谢谢,克

0 投票
0 回答
164 浏览

valgrind - Valgrind 下的 Intel Pin。库错误?

当我在 valgrind 下运行 intel pin 时,出现以下错误:

我有 valgrind-3.10.1

我明白了

有什么建议么?

0 投票
1 回答
343 浏览

c++ - 英特尔 Pin 中的全局变量

我的 pintool 中有这个全局变量,我想在指令(我的检测函数)中获取它的内容。

我怎样才能做到这一点?我已经尝试过 GLOBALVAR、LOCALVAR、const 和 static,但没有任何东西给我正确的值。

0 投票
1 回答
285 浏览

intel-pin - Intel Pin 3.0 不识别 MPX 指令?

我有最新版本的 Intel Pin 3.0 版本 76887。

我有一个支持 MPX 的玩具示例:

当使用 gcc + MPX 编译时,我在反汇编中看到 MPX 指令objdump,并且该示例正确地向我写入了边界违规:

现在我想计算使用 Intel Pin 的特定 MPX 指令的总数,例如BNDLDXBNDMK.

我的第一次尝试是使用随附的工具source/tools/SimpleExamples/trace.cpp。该工具向我展示NOPs了 MPX 指令的位置。

在我的第二次尝试中,我使用以下代码段编写了自己的工具:

这不起作用,countBndmk 永远不会被调用。我用其他指令 iclass 仔细检查了我的代码,它们起作用了。很明显,存在 Pin(或 XED?)无法识别 MPX 指令的问题。


浏览文档,我注意到一个有趣的旋钮

这个旋钮似乎启用了 MPX 解码,0默认情况下是这样,我不知道如何通过命令行或在我的工具中启用它。我在代码或互联网中没有发现其他关于此问题的参考。


我知道我可以使用英特尔 SDE 转储包括 MPX 指令在内的调试跟踪。我想知道是否有办法在 Intel Pin 中启用 MPX。或者唯一的解决方案是自己解码操作码?

0 投票
1 回答
236 浏览

instrumentation - 使用英特尔引脚的数据包处理应用程序的内存参考跟踪

我正在学习如何使用 Intel Pin,并且我有几个关于特定用例的检测过程的问题。我想创建一个简单的数据包处理应用程序的内存引用跟踪。为此,我开发了所需的 pintool,我的问题如下。

  • 假设我始终使用相同的网络数据包跟踪作为数据包处理应用程序的输入,假设我在两台不同的机器上检测同一个应用程序。内存参考轨迹有何不同?显然 Pin 仪器用户空间并且是独立于架构的,所以我不希望在两个输出内存参考跟踪中看到很大的质量差异。这个假设正确吗?

  • 如果我尝试将网络数据包注入数据包处理应用程序的速率,内存跟踪将如何变化?或者它会改变吗?如果是的话,我如何检测输出轨迹的不同?

谢谢