Intel Pin 3.0 不识别 MPX 指令?

Posted

技术标签:

【中文标题】Intel Pin 3.0 不识别 MPX 指令?【英文标题】:Intel Pin 3.0 does not recognize MPX instructions? 【发布时间】:2017-02-24 04:03:34 【问题描述】:

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

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

#include <stdio.h>
int g[10];
int main(int argc, char **argv) 
  int x = g[11];
  printf("%d\n", x);
  return 0;

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

Saw a #BR! status 0 at 0x401798

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

我的第一次尝试是使用随附的工具 source/tools/SimpleExamples/trace.cpp。这个工具在 MPX 指令的地方向我展示了NOPs

在我的第二次尝试中,我使用以下 sn-p 编写了自己的工具:

xed_iclass_enum_t iclass = (xed_iclass_enum_t)INS_Opcode(ins);
if (iclass == XED_ICLASS_BNDMK)
    INS_InsertPredicatedCall(ins, IPOINT_BEFORE, (AFUNPTR)countBndmk, IARG_END);

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


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

KNOB<BOOL> knob_mpx_mode(KNOB_MODE_WRITEONCE,"supported:xed","xed_mpx_mode","0","Enable Intel(R) MPX instruction decoding")

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


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

【问题讨论】:

试图打印指令 - 它每次都给我nops(我的架构不支持pin)。可能是架构是这里的问题吗?您是否检查过您的架构是否支持它? (只是猜测) 【参考方案1】:

回答可能有点晚,但您似乎只需将选项传递给 PIN。

一点背景:

在英特尔手册上有这一行(与 MPX 无关,但它提供了线索):

Add the knob support_jit_api to the Pin command line as Pin tool option:
    <Pin executable> <pin options> -t <Pin tool> -support_jit_api <Other Pin tool options> -- <Test application> <Test application options>

这个选项发生在there's an existing KNOB:

KNOB<BOOL> LEVEL_PINCLIENT::KnobJitApi  (   KNOB_MODE_WRITEONCE     ,
"pintool:sym"   ,
"support_jit_api"   ,
"0"     ,
"Enables the Jitted Functions Support"  
)

由于MPX旋钮定义为:

KNOB<BOOL> knob_mpx_mode(KNOB_MODE_WRITEONCE,"supported:xed","xed_mpx_mode","0","Enable Intel(R) MPX instruction decoding")

我猜你只需要将选项传递给 PIN:

<Pin executable> <pin options> -t <Pin tool> -xed_mpx_mode <Other Pin tool options> -- <Test application> <Test application options>

这些旋钮似乎是硬编码到 PIN / PinTools 上的。

【讨论】:

感谢这项研究,不幸的是,将这些选项添加到命令行并没有帮助(Pin 总是抱怨未知选项)。

以上是关于Intel Pin 3.0 不识别 MPX 指令?的主要内容,如果未能解决你的问题,请参考以下文章

目标代码重定位和 Intel Pin 交互

如何使用intel pin工具来计算在linux上执行的指令?

使用 Intel PIN 在寻址模式下检测具有特定寄存器的 mov dword ptr [rbp - ...] 指令

修改 PIN 中的应用指令

如何使用 Intel PIN 获取内存操作值?

Intel Pin Tool 权限错误