Intel Pin:如何获取系统调用的返回地址

时间:2018-04-16 16:31:38

标签: c++ intel-pin

在Intel Pin中,您可以使用IARG_RETURN_IP作为RTN_InsertCall的参数之一来获取例行调用的返回地址。

我希望对系统调用执行相同操作,使用PIN_AddSyscallEntryFunctionPIN_AddSyscallExitFunction进行检测。

所以一开始我考虑在调用之后获取指令指针的值 函数中的ADDRINT returnIp = PIN_GetContextReg(ctx, REG_INST_PTR);作为参数传递给PIN_AddSyscallExitFunction

但是,我注意到,如果我以相同的方式得到REG_INST_POINTER的值,但是在执行系统调用之前的这一次,我总是得到指令指针的两个值。

例如,我之前总是会得到2003266482,之后会得到2003266484。

所以我想知道为什么会这样,如果我做错了什么。

1 个答案:

答案 0 :(得分:1)

这与在libc中执行系统调用的方式有关,有一个程序集存根实际上需要做什么来将控制从内核传递回内核,所有系统调用都会通过。