C++ 英特尔Pin:如何获取系统调用的返回地址

C++ 英特尔Pin:如何获取系统调用的返回地址,c++,intel-pin,C++,Intel Pin,在英特尔Pin码中,您可以使用IARG\u return\u IP作为RTN\u InsertCall的参数之一,获取例行调用的返回地址 我想对系统调用执行同样的操作,使用PIN\u AddSyscallEntryFunction和PIN\u AddSyscallExitFunction进行检测 因此,首先我考虑在调用之后使用 ADDRINT returnIp=PIN\u GetContextReg(ctx,REG\u INST\u PTR) 但是,我注意到,如果我以相同的方式获得REG_INS

在英特尔Pin码中,您可以使用
IARG\u return\u IP
作为
RTN\u InsertCall
的参数之一,获取例行调用的返回地址

我想对系统调用执行同样的操作,使用
PIN\u AddSyscallEntryFunction
PIN\u AddSyscallExitFunction
进行检测

因此,首先我考虑在调用之后使用
ADDRINT returnIp=PIN\u GetContextReg(ctx,REG\u INST\u PTR)PIN\u AddSyscallExitFunction
的函数中的code>

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

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


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

这与libc中执行系统调用的方式有关,有一个单独的程序集存根,它实际上完成了将控制从内核传递回内核所需的工作,所有系统调用都会通过它