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

时间:2016-02-17 10:41:05

标签: c profiling cross-compiling intel-pin

我使用 - 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调用了错误&#39;无法加载..检查架构类型&#39; 。 情况1和2,命令成功但产生了一些意外的输出,因为在这种情况下写入文件的图像的名称是空的,但在使用64位应用程序执行时包含正确的结果。在这种情况下设置针脚工具的正确方法是什么?

3 个答案:

答案 0 :(得分:2)

我找到了一个解决方法来编译64位拱的pin(我的意思是instcount0)的32位库。

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

我的引脚位于/ opt / so,我编辑过

/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。在构建之后工作正常。

答案 1 :(得分:0)

在引脚控制下启动程序时需要注意几点:

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

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

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

4)使用pin.sh

你的命令应该是:

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

如果您仍然遇到问题,那么您的pintool代码可能存在问题,而不是自己固定。

你在程序中尝试过一个简单的例子(如inscount)吗?

答案 2 :(得分:0)

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

file PIN_DIR/pin

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

PIN_DIR/pin.sh

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