首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

Linux系统调用原理

二、进入系统调用 本文主要介绍的是 x86 CPU 进入系统调用的方式 Linux 提供了 int 0x80 中断来让用户程序进入 系统调用,我们来看看 Linux 对 int 0x80 中断的处理初始化过程...sys_ni_syscall) .long SYMBOL_NAME(sys_exit) .long SYMBOL_NAME(sys_fork) .long SYMBOL_NAME(sys_read...翻译成 C 代码如下: long sys_call_table[] = { sys_ni_syscall, sys_exit, sys_fork, sys_read, sys_write...Linux 使用寄存器来传递参数,参数与寄存器的关系如下: 第1个参数放置在 ebx 寄存器。 第2个参数放置在 ecx 寄存器。 第3个参数放置在 edx 寄存器。...而 Linux 进入中断处理程序时,会把这些寄存器的值保存到内核栈中,这样 系统调用 就能通过内核栈来获取到参数。

4.1K30

Linux 网络设备驱动开发(一) —— linux内核网络分层结构

Linux内核对网络驱动程序使用统一的接口,并且对于网络设备采用面向对象的思想设计。    Linux内核采用分层结构处理网络数据包。...在Linux内核,所有的网络设备都被抽象为一个接口处理,该接口提供了所有的网络操作。    net_device结构表示网络设备在内核中的情况,也就是网络设备接口。...Linux内核有一个dev_base的全局指针,指向一个设备链表,包括了系统内的所有网络设备。该设备链表每个节点是一个网络设备。   ...net_device结构保存在include/linux/netdevices.h头文件,理解该结构对理解网络设备驱动有很大帮助。   ...sock_read()函数读取接收到的数据缓冲,把数据返回给 sys_read()系统调用。sys_read()函数调用最终把数据复制到用户空间,供用户使得。

1.8K21

虚拟文件系统

Linux系统中,可以使用多种文件系统来挂载不同的设备,如 ext2、ext3、nfs等等。...那么Linux是如何做到的呢?这就得益于 虚拟文件系统(Virtual File System,简称 VFS)。...虚拟文件系统抽象数据结构 Linux奉行了Unix的理念:一切皆文件,比如一个目录是一个文件,一个设备也是一个文件等,因而文件系统在Linux中占有非常重要的地位。...注册文件系统 Linux为了支持不同的文件系统而创造了虚拟文件系统,虚拟文件系统更像一个规范(或者说接口),真实的文件系统需要实现虚拟文件系统的规范(接口)才能接入到Linux内核中。...读写文件 读取文件内容通过 read() 系统调用完成,而 read() 系统调用最终会调用 sys_read() 内核函数,sys_read() 内核函数的实现如下: asmlinkage ssize_t

1.5K30

内核中断体系概括

的中断机制 1、分类 Linux的中断分为硬件中断和软件中断 硬中断:由电脑中主机的 8259A 类似的硬件中断控制芯片发出的中断或 ARM 中断控制器发出的中断 软中断:称为异常 第一类:CPU...自行保留的中断 第二类:系统调用异常 2、代码结构 汇编文件 对应的c文件 linux/kernel/asm.s trap.c linux/kernel/system_call.s fork.c signal.c...跳转回正常工作的函数地址继续运行 2、Linux 中中断的工作流程 ①....,中断后的回复过程 中断的执行过程 硬件中断的处理过程 linux/kernel/asm.s traps.c 软件及系统调用的处理过程 linux/kernel/system_call.s fork.c...所有的系统调用 C 函数放到了一个统一的 sys_call_table 系统调用的操作码 fn_ptr sys_call_table[] = { sys_setup, sys_exit, sys_fork, sys_read

8410

如何增强Linux内核中的访问控制安全 | 洞见

---- Linux中常见的拦截过滤 本文着重介绍Linux平台上常见的拦截: 用户态动态库拦截。 内核态系统调用拦截。 堆栈式文件系统拦截。 inline hook拦截。...LSM(Linux Security Modules) ---- 动态库劫持 Linux上的动态库劫持主要是基于LD_PRELOAD环境变量,这个环境变量的主要作用是改变动态库的加载顺序,让用户有选择的载入不同动态库中的相同函数...在这里当发起read系统调用后,就会进入到sys_read,在sys_read中会调用vfs_read函数,在vfs_read的参数中正好有我们需要过滤的信息,那么就可以把vfs_read当做一个hook...第二种方式:Linux内核提供的kprobes机制。...---- LSM LSM是Linux Secrity Module的简称,即linux安全模块。是一种通用的Linux安全框架,具有效率高,简单易用等特点。原理如下: ?

2.4K10

操作系统篇-进程管理和中断

分配资源最重要的是:独立的内存空间,线程调度执行(线程共享进程的内存空间,没有自己独立的内存空间) 线程在Linux中的实现 《Linux内核设计与实现》第三版28页 线程在Linux就是一个普通的进程...进程 Linux中也称为task,是系统分配资源的基本单位 资源包括:独立的地址空间,内核数据结构(进程描述符…),全局变量, 数据段… Linux进程描述符:PCB (Process Control...Block),用于Linux的进程管理(线程有他的PCB) 僵尸进程 ps -ef |grep defunct (defunct表示无用的僵尸进程) 父进程产生子进程后,会维护子进程的PCB结构,子进程退出后...中是1457号线程) 调度策略 早期Linux 2.5 内核用的是Unix O(1)调度策略,按固定的时间片给程序 Linux内核2.6.23 采用CFS调度策略:Completely Fair Scheduler...注:eax 是32位的,ax是16位的 java中例子 java读网络 – jvm read() – c库read() - > 内核空间 -> system_call() (系统调用处理程序)-> sys_read

1.2K00
领券