使用 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上执行的指令?
解决虚拟机vmware安装64位系统“此主机支持 Intel VT-x,但 Intel VT-x 处于禁用状态”的问题
解决虚拟机vmware安装64位系统“此主机支持 Intel VT-x,但 Intel VT-x 处于禁用状态”的问题