2

我使用-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 工具的正确方法是什么?

4

3 回答 3

2

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

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

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

于 2016-11-06T14:53:34.100 回答
0

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

file PIN_DIR/pin

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

PIN_DIR/pin.sh

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

于 2017-12-20T16:51:45.843 回答
0

在引脚控制下启动程序时有一些注意事项:

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

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

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

4) 使用pin.sh

你的命令应该是:

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

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

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

于 2016-02-18T09:29:48.877 回答