【问题标题】:How can i pass instruction to a call back in intel-pintool?如何将指令传递给 intel-pintool 中的回调?
【发布时间】:2015-08-31 04:22:20
【问题描述】:

我是 pintool 的新手,我知道如何将指令地址传递给回调,方法是:
INS_InsertPredicatedCall( ins, IPOINT_BEFORE, (AFUNPTR)MyFunction, IARG_ADDRINT, INS_Address(ins), IARG_END); // My call back function is: MyFunction(UINT64 insAddress) { .... }

有没有办法将指令传递给回调,或者可以从它的地址中提取它。
喜欢:

MyFunction( UINT64 insAddress, INS ins ) {.... }
MyFunction(UINT64 insAddress) { INS ins = someFunction(insAddress);// some function that return instruction of a specified address }

【问题讨论】:

  • 您能解释一下通过将 INS 传递给 myFunction 来实现的目标吗?一般来说,在检测函数中进行尽可能多的处理会更好(性能方面),那么为什么不传递处理结果而不是 INS 对象呢?
  • @nitzanms ,谢谢,首先我想在运行时进行一些处理,但现在我不需要回调中的 INS,我在检测函数中进行一些处理并将其传递给回调函数,(根据您的建议),再次感谢。
  • 考虑用类似的方式回答你自己的问题。

标签: c++ intel-pin


【解决方案1】:

我为此使用的解决方案是将 INS 传递到自定义对象并将这些对象保存到 std::map<ADDRINT, Instruction> 的映射中。然后,当我需要访问指令时,我将它们按地址映射。似乎工作正常。

【讨论】:

    【解决方案2】:

    我发现有人说:
    “这是关于分析程序,而不是仪器程序。 AFAIK,您无法在分析例程中处理 INS、BBL 或 TRACE 类型,并且正如您所见,无法将它们传递给分析例程......“

    【讨论】:

    • 但是如果我不能在我的检测函数内部的回调中将 INS 作为参数传递,我可以在另一个检测函数中添加另一个检测函数吗(添加:INS_AddInstrumentFunction(MyFunction, 0) inside TRACE_AddInstrumentFunction(Trace, 0) ,我成功了,但我不确定这是否是一个好方法并给出正确的结果??
    猜你喜欢
    • 2015-08-31
    • 2015-10-05
    • 2017-03-03
    • 1970-01-01
    • 2021-03-31
    • 1970-01-01
    • 2014-06-10
    • 2013-06-19
    • 1970-01-01
    相关资源
    最近更新 更多