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

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

我试过了 :-

1) pin -t64 -t --

2) pin -t --

3) pin -t --

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

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

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

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

我有针位于/ 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)pintool 必须在与仪表程序相同的架构中编译 (因此,如果你的程序是32位,你的引脚工具必须是32位)。

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

3)确保您拥有PIN所需的所有库

4)使用pin.sh

你的命令应该是:

  • pin -t pintool.so --

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

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

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

 file PIN_DIR/pin 

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

 PIN_DIR/pin.sh 

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