如何将指令传递给 intel-pintool 中的回调?

Posted

技术标签:

【中文标题】如何将指令传递给 intel-pintool 中的回调?【英文标题】:How can i pass instruction to a call back in 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,我在检测函数中进行一些处理并将其传递给回调函数,(根据您的建议),再次感谢。 考虑用类似的方式回答你自己的问题。 【参考方案1】:

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

【讨论】:

【参考方案2】:

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

【讨论】:

但是如果我不能在我的检测函数内部的回调中将 INS 作为参数传递,我可以在另一个检测函数中添加另一个检测函数吗(添加:INS_AddInstrumentFunction(MyFunction, 0) inside TRACE_AddInstrumentFunction(Trace, 0) ,我成功了,但我不确定这是否是一个好方法并给出正确的结果??

以上是关于如何将指令传递给 intel-pintool 中的回调?的主要内容,如果未能解决你的问题,请参考以下文章

AngularJs 将 HTML 中每个 ng-repeat 的实例传递给指令

如何将多个属性传递给 Angular.js 属性指令?

如何将不同的类传递给元素指令

如何将 PHP 变量传递给 Vue 指令

angularjs组件控制器未将初始绑定值传递给模板中的指令(summernote)

如何将指令的范围值作为$ scope传递给控制器