我想使用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
我最近一直在研究类似的问题,并且遇到与您相同的错误。
我相信,我们俩都遇到的问题是:我们的计算机有一个称为RAX的硬件寄存器,而EAX只是其中的一部分。如您在以下示例的最后几行中看到的]
// change eax
PIN_SetContextReg(ctxtTo, REG_RAX,0xbaadf00d);
解决此问题后,我的程序可以正常工作!如果您需要我的代码作为参考,请随时询问:)下面的屏幕截图来自https://studylib.net/doc/10207218/verdana-bold-30