英特尔 Pin:如何获取系统调用的返回地址
Intel Pin: how to obtain return address of system call
在英特尔引脚中,您可以使用IARG_RETURN_IP
作为RTN_InsertCall
的参数之一来获取例行呼叫的返回地址。
我想对系统调用做同样的事情,使用PIN_AddSyscallEntryFunction
和PIN_AddSyscallExitFunction
进行检测。
所以起初我想在调用后使用ADDRINT returnIp = PIN_GetContextReg(ctx, REG_INST_PTR);
函数中作为参数传递给PIN_AddSyscallExitFunction
.
但是,我注意到,如果我以相同的方式获取REG_INST_POINTER
的值,但这次在执行系统调用之前,我总是为指令指针获得相同的两个值。
例如,我总是会在之前和之后2003266484 2003266482。
所以我想知道为什么会这样,如果我做错了什么。
这与 libc 中执行系统调用的方式有关,有一个程序集存根实际上执行了从内核传递和传回内核所需的操作,所有系统调用都会通过内核。
相关文章:
- 有什么好的方法可以让系统调用代理允许在单元测试中进行模拟
- 如果整个应用程序是虚拟映射的,为什么 new 会进行系统调用?
- 如何安全地从 DLL 调用返回对象
- 如何将C++系统调用连接到 freertos
- 如何使用 C/C++ 和 system() 系统调用以外的其他方法在 Linux 中获取文件功能?
- 类对象属性是否可以调用返回属性应具有的值的方法C++?
- 从类似构造函数的调用返回模板化智能指针
- 系统调用:一次和多次,哪个更好?
- C ++ DLL导入:函数调用返回错误的结果
- 使用路径和空格的系统调用
- 是否有等效于 macOS 上的 clone() 系统调用?
- 从C++调用系统调用节点?
- C++测试程序中的非法系统调用(对角矩阵元素程序的总和)
- 系统("暂停")返回EXIT_SUCCESS和返回 0 之间的区别
- 如何调用返回类方法指针的类方法
- 英特尔 Pin:如何获取系统调用的返回地址
- 谁需要释放返回char*的系统调用的内存
- setxkbmap 从系统调用执行时返回 65280
- WinInet InternetReadFile返回0x8007007a(传递给系统调用的数据区域太小)
- Linux C++程序通过系统调用启动bash脚本时总是返回-1