0

我想使用 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

4

1 回答 1

0

我最近一直在研究类似的问题,并且遇到了和你一样的错误。

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

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

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

在此处输入图像描述

于 2020-05-27T08:30:01.287 回答