我正在使用Pin
动态分析。
在我对 64 位 x86 二进制代码的动态分析任务中,我想在修复信号处理回调中的某些内存访问错误后,在任意程序位置(例如,当前执行函数的第二条指令)恢复执行。
它会是这样的:
BOOL catchSignalSEGV(THREADID tid, INT32 sig, CONTEXT *ctx, BOOL hasHandler, const EXCEPTION_INFO *pExceptInfo, VOID *v)
{
// I will first fix the memory access error according to certain rules.
fix();
// then I would like to resume the execution at an arbitrary position, say, at the beginning of current monitored function
set_reg(rip, 0x123456); // set the rip register
PIN_ExecuteAt(ctx); // resume the execution
return false;
}
但是,我得到了这个异常:E: PIN_ExecuteAt() 不能从回调中调用。
我知道我可以通过在信号处理函数结束时返回 false来恢复“当前指令”的执行,但基本上我可以在任意位置恢复吗?
我清楚了吗?感谢您的帮助!