首页
学习
活动
专区
工具
TVP
发布

Linux内核分析》之触发一个系统调用实验总结

实验及代码 fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同,两个进程也可以做不同的事。...首先将ebx清零,使用eax传递系统调用号,此处设为2,之后fork()函数(其系统调用对应的api)运行,期间触发int 0x80的中断完成由用户态进入内核态的转变过程,在执行完系统调用后,其系统调用的返回值使用...当初由于没仔细看视频于是有了上面最后的代码实验测试,在eax处设了个13,调成time的系统调用号了,故最后一张图中打印出来的仅有一个主程序。...总结 系统通过中断的方式完成用户态到内核态的转换过程,同时调用系统函数实现系统功能。...windCoder原创作品转载请注明出处 参考资料 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000 实验代码参考地址:

83930
您找到你想要的搜索结果了吗?
是的
没有找到

Linux内核源码分析 - 系统调用 . 续

上一篇文章 Linux内核源码分析 - 系统调用 中分析了linux下的系统调用在kernel space层是如何实现的,现在我们来分析下user space层的实现。...上篇结尾讲到我们可以使用syscall机器指令来调用系统调用,那如何指定系统调用的编号及参数,以及如何获取返回值呢?...详细介绍可以参考这篇文章: http://man7.org/linux/man-pages/man2/syscall.2.html 简而言之就是通过一定的约定来实现指定系统调用编号和传递参数及返回值。...注意,这里的write并不是kernel内部的系统调用write,而是glibc中的一个wrapper,这个wrapper里面再帮我们调用真正的系统调用write。...我们在写c时(其他语言也一样),调用的其实是glibc里的wrapper,glibc里的wrapper再帮我们调用对应的系统调用,之后再将结果从rax中取出,返回给我们,这样我们使用起来就非常方便了。

2.2K40

Linux内核分析》之操作系统是如何工作的 实验总结

前言 实验阶段,由于学校网速等条件限制,未能在真机上搭建出实验环境。在实验楼中,将代码粘贴进去出现严重的缩进错位,最终未能完成编译新的。本文以分析关键代码为主。.../mykernel_for_linux3.9.4sc.patch 6、make allnoconfig 复位 7、make 编译 8、安装qemu 9、使用qemu查看内核 10、结合网上所查资料,在mykernel...之后再在linux-3.9.4文件夹中make 编译一下。 11、使用qemu再次查看内核,正常情况下应该可以看到更改后的。...小总结:1-7步是编译linux内核过程,8-9为查看内核信息的过程,10-11为编写自己的简易内核过程。 相关图片 ? mymain.c部分截图 ? 代码粘进去严重错位了= = ?...linux内核工作状态 实验总结  主要代码及分析 各文档所包含的头文件不在列出 mypcb.h 这个头文件主要定义了进程控制结构PCB mypcb.h #define MAX_TASK_NUM 4

1.8K31

Linux 内核0.11 系统调用详解(上)

https://blog.csdn.net/u014688145/article/details/50608829 备注:本文通过三个问题,引出Linux 内核0.11的系统调用。...由图可以看出,从操作系统的角度来看,一台计算机主要分为两级:用户级以及内核级,系统调用主要作用就是连接用户级和内核级的“插座”。...对底层的操作,如果不通过系统调用限制,会发生用户应用程序修改系统内核等误操作,造成操作系统运行瞬间奔溃,考虑到系统的稳定性、安全性等问题,我们需要向上提供接口,限制应用层连入内核的权限。...因此,自然而然的一个想法就是,通过对与内核模块代码段,数据段和对用户区的代码数据段做区分来阻止用户直接访问内核模块。Linux内核通过建立段级保护机制来完成上述区分核心与用户态区域的功能。...系统调用,基本结束了,剩下的即是内核代码的编写。在下一节中,我们将在实际的操作系统编写两段内核代码函数,让用户程序能调用系统函数。尽请期待!o(∩_∩)o

1.6K31

Linux内核分析》之构造一个简单的Linux系统MenuOS 实验总结

环境搭建与配置过程 个人Linux系统环境搭建MenuOS的过程 Linux系统环境搭建MenuOS的过程 1、Linux系统环境搭建MenuOS的过程 # 下载内核源代码编译内核 cd ~/LinuxKernel...-xvf linux-3.18.6.tar cd linux-3.18.6 make i386_defconfig make # 一般要编译很长时间,少则20分钟多则数小时 # 制作根文件系统 cd...继续运行 (gdb)break start_kernel # 断点的设置可以在target remote之前,也可以在之后 在实验楼中的过程 实验楼中实验过程 使用实验楼的虚拟机打开shell cd LinuxKernel...rest_init();中包含内核启动过程 所在位置:xref: /linux-3.18.6/init/main.c rest_init()函数 从系统内核一启动,rest_init()会一直存在,是...总结 Linux内核的启动,通过start_kernel()进行各种初始化工作,最终执行到rest_init()来初始化0号进程,同时0号进程创建1号用户态的进程以及其他服务的一些内核线程。

2.1K10

Linux 内核 内存管理】mmap 系统调用源码分析 ① ( mmap 与 mmap2 系统调用 | Linux 内核中的 mmap 系统调用源码 )

文章目录 一、mmap 与 mmap2 系统调用 二、Linux 内核中的 mmap 系统调用源码 一、mmap 与 mmap2 系统调用 ---- mmap 创建 " 内存映射 " 的 系统调用 有...mmap2 ; 2 者区别是 : mmap 偏移单位是 " 字节 " , mmap2 偏移单位是 " 页 " , 但是在 arm 64 体系架构中 , 没有实现 mmap2 , 只实现了 mmap 系统调用...; 二、Linux 内核中的 mmap 系统调用源码 ---- arm64 架构体系中 , 使用 mmap 系统调用 创建 " 内存映射 " , 调用 mmap 系统调用函数 , 执行如下操作 : 先检查...函数 , 继续向下执行 ; mmap 系统调用代码如下 : SYSCALL_DEFINE1(old_mmap, struct mmap_arg_struct __user *, arg) { struct...return sys_mmap_pgoff(a.addr, a.len, a.prot, a.flags, a.fd, a.offset >> PAGE_SHIFT); } 参考路径 : linux

10.1K40

Linux 内核】进程管理 ( 系统调用简介 | 进程相关系统调用源码 )

文章目录 一、系统调用简介 二、进程相关系统调用源码 一、系统调用简介 ---- 在开发应用程序时 , 进行 " 进程创建 " , 调用的 fork() , vfork() , clone() 等函数..., 就是 " 系统调用 " ; " 系统调用 " 是 操作系统 提供的 应用程序 调用 内核功能 的接口 , 如 : 创建进程 , 文件操作 等 ; 系统调用内核 的关系 : 在 应用进程 中调用...fork() 系统调用 函数 , 实际上调用的是 Linux 内核中的 sys_fork() 函数 ; 在 应用进程 中调用 vfork() 系统调用 函数 , 实际上调用的是 Linux 内核中的...sys_vfork() 函数 ; 在 应用进程 中调用 clone() 系统调用 函数 , 实际上调用的是 Linux 内核中的 sys_clone() 函数 ; Linux 内核中的 sys_fork...---- Linux 进程相关 " 系统调用 " 对应的源码在 linux-5.6.18\kernel\fork.c 源码中 ,

2K20

Linux 内核 内存管理】Linux 内核堆内存管理 ② ( 动态分配堆内存方式 | brk 系统调用 | mmap 系统调用 | brk 系统调用源码介绍 )

文章目录 一、Linux 系统 动态分配堆内存 方式 二、brk 系统调用 动态分配堆内存 一、Linux 系统 动态分配堆内存 方式 ---- Linux 系统中 , 提供了 2 种方式 进行 "...动态分配堆内存 " 操作 ; ① brk 系统调用 : 该方式本质是 设置 " 进程数据段 “ 的 结束地址 , 将该 ” 结束地址 " 向 高或低 移动 , 实现堆内存的 扩张或收缩 ; ② mmap...系统调用 : 向 Linux 操作系统 申请 " 虚拟地址空间 " 内存 , 并且将某个文件 " 映射 “ 到该申请的内存中 ; 如果 不需要映射文件 到该空间中 , 则该空间就是 ” 匿名空间 "..., 可作为 " 堆内存 " 使用 ; 二、brk 系统调用 动态分配堆内存 ---- " brk 系统调用 “ 可以指定 ” 堆内存 “ 在 ” 虚拟内存空间 “ 的 ” 结束地址 " ; 如果要 "...扩张 " 堆内存 , 可以将 结束地址 " 大于当前值 " , 如果要 " 收缩 " 堆内存 , 可以将 结束地址 " 小于当前值 " ; brk 系统调用 源码在 Linux 源码中的 linux-5.6.18

4.9K20

Linux动态为内核添加新的系统调用

本文的主题依然不是劫持系统调用,而是添加系统调用,并且是动态添加系统调用,即在不重新编译内核的前提下添加系统调用,毕竟如果可以重新编译内核的话,那实在是没有意思。...我的问题是: Linux系统中如何获取以及修改当前进程的名字??...至于说为什么系统调用号必须是逐渐递增的,请看: callq *-0x7e9b2c40(,%rax,8) 上述代码的含义是: call index * 8 + disp32_offset 这意味着内核是按照数组下标的方式索引系统调用的...text被copy到了新的页面,因此最好不要调用内核函数。...封堵模块加载的接口即可咯,反正不加载内核模块,谁也别想看到当前系统内核被hack成了什么样子,哦,对了,把/dev/mem的mmap也堵死哦... ....不过这是下面文章的主题了。

1.7K30

Linux 内核编程总结

Linux 内核编程总结 从事了几年的内核编程,对内核编程有一定的经验...,现总结、吐槽下,作为标记。...那么内核的入口点是什么?个人理解整个OS,运行起来就是一个进程, 内核的入口点是init进程,在这个进程中负责: 1)子进程的创建,包括内核的线程、用户态的进程。...2)进程调度 3)I/O调度 4)内存管理 内核编程跟用户态编程的相同点、异同点: 1)多线程编程需要同步、互斥,互斥的语义提供了 锁、...不同点: 在内核中分为中断环境和非中断环境,中断环境中不能睡眠,所有会睡眠的函数不能在中断环境中调用,否则会出现假死。 因为中断环境睡眠,操作系统是无法唤醒该调用

78120

Linux内核设备驱动之系统调用笔记整理

linux中,系统调用是用户空间访问内核的唯一手段,除异常和中断外,他们是内核唯一的合法入口。系统调用的数量很少,在i386上只有大概300个左右。...include/asm/unistd.h中 (6)要实现系统调用需注意哪些方面 给linux添加一个系统调用不难,但怎么设计和实现一个系统调用是难题所在。...linux不提倡采用多用途的系统调用(根据不同的参数提供不同的功能)。...通常,系统调用靠c库支持,glibc不可能支持我们自己的系统调用,此时,需要借助linux本身提供的一组宏来对系统调用直接进行访问。...man 2 syscall 总结 以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对ZaLou.Cn的支持。

1.8K31

Linux内核之旅张凯捷——系统调用分析(2)

在《系统调用分析(1)》Linux内核之旅/张凯捷——系统调用分析(1)中,首先介绍了系统调用的概念,并对早期通过软中断(int 80)来进行系统调用的相关过程进行了分析,最后分析和介绍了为了提高系统调用的响应执行速度的两种机制...并且在linux-4.20内核,glibc-2.23版本环境下编写了用户态系统调用程序并对程序运行追踪分析。...3.3.2 linux4.20内核sysenter系统调用linux4.20内核中,对IA32_SYSENTER_EIP寄存器中传入的是entry_SYSENTER_32函数。...,以及对linux-2.6.39和linux-4.20内核源码中支持快速系统调用相关部分进行分析,了解了进行系统调用的执行过程和内核对快速系统调用的相关操作。...下篇将基于Linux-5.0-rc2内核,添加系统调用,完成一个”系统调用日志收集系统“,并对系统调用分析进行总结。 ----

1.8K20

Linux内核之旅张凯捷——系统调用分析(1)

2 《Linux操作系统原理与应用》解释: 陈莉君老师的《Linux操作系统原理与应用(第二版)》对Linux系统调用解释为: 系统调用的实质就是函数调用,只是调用的函数是系统函数,处于内核态而已...用户在调用系统调用时会向内核传递一个系统调用号,然后系统调用处理程序通过此号从系统调用表中找到相应地内核函数执行(系统调用服务例程),最后返回。...3 总结 操作系统内核提供了许多服务,服务在物理表现上为内核空间的函数,系统调用即为在用户空间对这些内核提供服务的请求,即在用户空间程序“调用内核空间的函数完成相应地服务。...// 系统调用实现分析 int / iret 0 1 早些时候,通过int 80来进行系统调用调用一个系统调用示意图: 图2-1 int80系统调用示意图 下面基于linux-2.6.39内核进行分析...2.1 vsyscalls vsyscalls的工作原理即为:Linux内核将第一个页面映射到用户空间,该页面包含一些变量和一些系统调用的实现,被映射到用户空间的系统调用即可以在用户空间执行,不需要进行上下文切换

1.5K30

Linux内核分析》之计算机是如何工作的 实验总结

前言 前两天在家电脑win7系统一直打不开网站,今天换了个网反而好了,具体原因未知。 马马虎虎学完了Python课程,一直想学下linux,看到里面有个linux的就选上了。...注:本文具有总结兼作业性质,如有雷同,纯属巧合。 实验总结 本实现代码及汇编部分均在实验楼完成。...实验代码 int g(int x) { return x + 2; } int f(int x) { return g(x); } int main(void) {...2、对x86计算机大多数的指令可直接访问一个内存地址 AT&T汇编格式与Intel汇编格式略有不同 Linux内核使用的是AT&T汇编格式 windCoder原创作品转载请注明出处 参考资料 本文部分资料与图片参考自...《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000

99310

跟踪分析Linux内核5.0系统调用处理过程

跟踪分析Linux内核5.0系统调用处理过程 实验要求 实验环境 实验步骤 一、下载Linux内核5.0并编译 二、挂载 menuOS 三、跟踪分析系统调用函数`sys_sync`和`sys_syncfs...:举例跟踪分析Linux内核5.0系统调用处理过程 编译内核5.0 qemu -kernel linux-5.0.1/arch/x86/boot/bzImage -initrd rootfs.img...选择系统调用号 "36" 的系统调用进行跟踪分析 https://github.com/mengning/menu 给出相关关键源代码及实验截图 ---- 实验环境 Linux 4.15.0 Ubantu...18.04.2 gcc 7.3.0 Windows 10 VMware Workstation ---- 实验步骤 一、下载Linux内核5.0并编译 下载Linux内核5.0 从Linux...---- 实验结论 一、系统调用流程 我们以一个假设的系统调用xyz 如图,系统调用执行的流程如下: 应用程序代码调用系统调用xyz,该函数是一个包装系统调用的库函数xyz; 库函数xyz负责准备向内核传递的参数

1.2K20
领券