使用 INTEL PIN 在 64 位系统上配置 32 位应用程序

Posted

技术标签:

【中文标题】使用 INTEL PIN 在 64 位系统上配置 32 位应用程序【英文标题】:Profile 32-bit app on 64-bit system using INTEL PIN 【发布时间】:2016-05-29 00:25:57 【问题描述】:

我使用 -m32 gcc 选项编译了一个 C 程序。我想使用 Pin 工具来分析这个程序。我的内核是 64 位的。

我试过了:-

1) pin -t64 <64-bit toolname> -t <32-bit toolname> -- <application>

2)pin -t <32-bit toolname> -- <application>

3)pin -t <64-bit toolname> -- <application>

对于 32 位和 64 位架构编译不同的工具,我有相同的 .cpp 工具文件。

案例 3 调用错误“无法加载..检查架构类型”。 情况 1 和 2,命令成功但产生了一些意外的输出,例如写入文件的图像名称在这种情况下为空,但在使用 64 位应用程序执行时包含正确的结果。为这种情况设置 pin 工具的正确方法是什么?

【问题讨论】:

您在案例 2 和 1 中以正确的方式调用 pin(案例 1 用于复杂的流程树流)。我怀疑问题不是 Pin 本身,而是 Pintool 中的某些东西。你能分享一下这个问题的最小复制者吗? 【参考方案1】:

在引脚控制下启动程序时需要了解一些注意事项:

1) pintool必须在与插桩程序相同的架构中编译(因此,如果您的程序是 32 位,则您的 pin 工具必须是 32 位)。

2) 确保您的系统设置为在 64 位操作系统上执行 32 位程序(一些 linux 系统仍然需要 ia32-libs 和/或需要为执行 32 位程序做好准备(例如 sudo dpkg --add-architecture i386

3) 确保您拥有all required libraries for PIN

4) 使用pin.sh

你的命令应该是:

pin -t pintool.so -- <program> <program-options>

如果您仍然有问题,则可能是您的 pintool 代码有问题,而不是 pin 本身。

您是否在您的程序中尝试过一个简单的示例(例如inscount)?

【讨论】:

我已经处理了您提到的所有四种情况,即使给定的 inscount.so 也没有为 32 位可执行文件提供任何输出。那可能是什么错误?如给定的那样,我已经为 32 位架构单独编译了它。但是对于我的工具,我收集了有关正确出现的分支和函数的信息,但包含图像名称的文件是空的。【参考方案2】:

我找到了一种解决方法,可以在 64 位架构中编译 32 位 pin 库(我的意思是 instcount0 )。

我确实修改了与构建库相关的配置文件。

我的 pin 位于 /opt/ 所以,我编辑了

/opt/pin-3.0-76991-gcc-linux/source/tools/Config

在第 38 行

# Define the architecture of the target
# ; TARGET ?= $(HOST_ARCH)
TARGET = ia32
ifeq ($(TARGET),ia32)
    BITS := 32
else
    BITS := 64
endif

我刚刚将目标更改为 ia32。构建后工作正常。

【讨论】:

【参考方案3】:

检查您的 PIN 二进制文件的版本。

file PIN_DIR/pin

我从link 下载了 PIN 套件。我的 PIN 二进制文件是 32 位的。如果你的是64位版本,可以修改pin.sh中检查系统架构的代码,然后运行

PIN_DIR/pin.sh

这应该会给你一个 32 位版本的 PIN 二进制文件。

【讨论】:

以上是关于使用 INTEL PIN 在 64 位系统上配置 32 位应用程序的主要内容,如果未能解决你的问题,请参考以下文章

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

Pin

解决虚拟机vmware安装64位系统“此主机支持 Intel VT-x,但 Intel VT-x 处于禁用状态”的问题

解决虚拟机vmware安装64位系统“此主机支持 Intel VT-x,但 Intel VT-x 处于禁用状态”的问题

解决虚拟机vmware安装64位系统“此主机支持 Intel VT-x,但 Intel VT-x 处于禁用状态”的问题

linux磁盘分区