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