【问题标题】:How can i track a specific loop in binary instrumentation by using pin tool?如何使用 pin 工具跟踪二进制仪器中的特定循环?
【发布时间】:2015-08-04 16:49:33
【问题描述】:

我刚开始使用 intel pin 工具,想在二进制文件中跟踪某个循环,但我在每次运行中发现每次运行中更改的指令地址,我如何找到特定指令或特定指令循环,即使它在每次运行中都会改变?

编辑 0:

我有以下地址,其中一个是 RVA:(地址的第一部分(小地址)对于每次运行都是恒定的,但最后一部分(大地址)每次运行都会改变)
地址loop_repeation No._of_Instruction_In_Loop
4195942 1 8
4195972 1 3
.......    ...    ...
140513052566480 1 2
......   ...   ...

【问题讨论】:

    标签: c++ ubuntu intel-pin


    【解决方案1】:

    每次运行时更改的指令地址,即使每次运行都更改,我如何找到特定指令或特定循环?

    这可能是因为您启用了ASLR(在 Ubuntu 上默认启用)。如果您希望分析的程序在每次运行时加载到相同的地址,您可能需要:

    1) 禁用 ASLR:

    • 在系统范围内禁用它:sysctl -w kernel.randomize_va_space=0 as explained here
    • 按进程禁用它:$> setarch $(uname -m) -R /bin/bashexplained here

    2) 在您的 pintool 中计算 delta(偏移量):

    对于您操作的每个地址,您需要使用 RVA (Relative Virtual Address) 而不是完整的 VA(虚拟地址)。

    例子:

    • 假设在您第一次运行时,您的程序在 0x80000000(这是“基地址”)处加载,循环从 0x80000210 开始
    • 第二次运行时,程序在 0x90000000(“基地址”)加载,循环从 0x90000210 开始

    只需从基地址计算循环的偏移量:

    • Base_Address - Program_Address = 偏移量
    • 0x80000210 - 0x80000000 = 0x210
    • 0x90000210 - 0x90000000 = 0x210

    由于两个结果偏移量相同,因此您知道您有完全相同的指令,与程序的基地址无关。

    如何在您的 pintool 中执行此操作:

    • 给定一个(指令)地址,使用IMG_FindByAddress找到对应的图像(模块)。
    • 从图片中,使用IMG_LowAddress获取模块的基地址。
    • 从指令中减去模块库:你有 RVA。

    现在您可以比较它们之间的 RVA,看看它们是否相同(它们也必须在同一个模块中)。

    显然这不适用于 JITed 代码,因为 JITed 代码没有可执行模块(想想 mmap() [linux] 或 VirtualAlloc() [windows])...

    最后there's a good paper(现在很旧,但仍然适用)使用 pin 进行循环检测,如果可以帮助您的话。

    【讨论】:

    • 谢谢亲爱的,我有以下地址,其中一个是RVA:(地址的第一部分(小地址)每次运行都是不变的,但最后一部分(大地址)每次运行都更改)地址 loop_repeation No._of_Instruction_In_Loop 4195942 1 8 4195972 1 3 ....... ... ... 140513052566480 1 2 ...... ... ...
    • @MosMoh 你能用你在这里粘贴的内容编辑和更新你的问题吗?如果格式不正确,就很难阅读......另外,你有没有尝试应用我的任何建议?什么不起作用?
    • @Neitsa,谢谢亲爱的,我编辑了这个问题,我希望现在清楚了,我没有尝试过,我仍然有误解,如果在运行时执行的指令数发生了变化(可能是由于函数调用的 if 条件)这种方法仍然有效吗?
      感谢我收到的论文。
    猜你喜欢
    • 2017-07-18
    • 2016-02-10
    • 2012-12-15
    • 2018-04-20
    • 2017-04-08
    • 1970-01-01
    • 2017-07-26
    • 2017-02-04
    • 1970-01-01
    相关资源
    最近更新 更多