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

问题描述 投票:0回答:1

我想使用PIN_GetContextReg来获取寄存器的值,然后对其进行更改并使用PIN_SetContextReg将其放回去。 PIN手册说我可以对整数寄存器执行此操作,但是我尝试使用的所有寄存器(RE​​G_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

instrumentation intel-pin
1个回答
0
投票

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

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

// change eax
PIN_SetContextReg(ctxtTo, REG_RAX,0xbaadf00d);

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

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.