可以使用PIN_GetContextReg和PIN_SetContextReg修改哪些寄存器

时间:2016-08-01 14:39:41

标签: instrumentation intel-pin

我想使用PIN_GetContextReg来获取寄存器的值然后更改它并使用PIN_SetContextReg将其重新放回。 PIN手册说我可以使用整数寄存器,但我尝试的除REG_INST_PTR以外的所有寄存器都会出错(PIN_GetContextReg / PIN_SetContextReg不支持寄存器**)

这是代码

    UINT32 old_val;
    UINT32 new_val;
    old_val = PIN_GetContextReg(ctxt,   REG_EAX);       
    new_val = old_val ^ mask;
    PIN_SetContextReg(ctxt,  REG_EAX, new_val);         
    PIN_RemoveInstrumentation();
    PIN_ExecuteAt(ctxt);

在这种情况下我尝试使用寄存器EAX,我得到了同样的错误。我正在使用Pin 3.0

1 个答案:

答案 0 :(得分:0)

我最近一直在处理类似的问题,并且遇到与您相同的错误。

我相信,我们俩都遇到的问题是:我们的计算机有一个称为RAX的硬件寄存器,而EAX只是其中的一部分。如您在以下示例的最后几行中所见

package_name::function

解决此问题后,我的程序可以运行了!如果您需要我的代码作为参考,请随时询问:) 下面的屏幕截图来自https://studylib.net/doc/10207218/verdana-bold-30

enter image description here