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

Intel Pin: how to obtain return address of system call

本文关键字:系统调用 返回 地址 获取 Pin 何获取 英特尔      更新时间:2023-10-16

在英特尔引脚中,您可以使用IARG_RETURN_IP作为RTN_InsertCall的参数之一来获取例行呼叫的返回地址。

我想对系统调用做同样的事情,使用PIN_AddSyscallEntryFunctionPIN_AddSyscallExitFunction进行检测。

所以起初我想在调用后使用ADDRINT returnIp = PIN_GetContextReg(ctx, REG_INST_PTR);函数中作为参数传递给PIN_AddSyscallExitFunction.

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

例如,我总是会在之前和之后2003266484 2003266482。

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

这与 libc 中执行系统调用的方式有关,有一个程序集存根实际上执行了从内核传递和传回内核所需的操作,所有系统调用都会通过内核。