手把手教你阻截体系调用

时间:2022-01-13 14:05来源:http://www.shopwholesalejerseys.com 作者:13岁这水水逼太嫩了-这水水逼太嫩了-19岁又紧水又多 点击:
兼职招募 | 51CTO社区编辑添盟指南

一、什么是体系调用

体系调用 是内核挑供给行使程序行使的功能函数,由于行使程序清淡运走在 用户态,处于用户态的进程有诸众节制(如不克进走 I/O 操作),因而有些功能必须由内核代劳完善。而内核就是始末向行使层挑供 体系调用,来完善一些在用户态不克完善的做事。

说白了,体系调用其实就是函数调用,只不过调用的是内核态的函数。但与清淡的函数调用差别,体系调用不克行使 call 指令来调用,而是必要行使 柔休止 来调用。在 Linux 体系中,体系调用清淡行使 int 0x80 指令(x86)或者 syscall 指令(x64)来调用。

下面吾们以 int 0x80 指令(x86)调用手段为例,来表明体系调用的原理。

二、体系调用原理

在 Linux 内核中,行使 sys_call_table 数组来保存一切体系调用,sys_call_table 数组每一个元素代外着一个体系调用的入口,其定义如下:

typedef void (*sys_call_ptr_t)(void);  const sys_call_ptr_t sys_call_table[__NR_syscall_max+1] = {     ... }; 

当行使程序必要调用一个体系调用时,最先必要将要调用的体系调用号(也就是体系调用所在 sys_call_table 数组的索引)安放到 eax 寄存器中,然后始末行使 int 0x80 指令触发调用 0x80 号柔休止服务。

0x80 号柔休止服务,会始末以下代码来调用体系调用,如下所示:

... call *sys_call_table(,
          
网站分类
相关内容
热点内容
相关站点
友情链接
返回顶部