
Linux内核
文章平均质量分 52
huzai9527
这个作者很懒,什么都没留下…
展开
-
linux进程创建源码分析
进程的创建进程创建流程a. do_fork主要处理clone、fork、vfork系统调用 1. 先检查父进程的ptrace字段,如果父进程被跟踪了,则根据clone_flag的信息,对子进程进行相关操作 2. 调用copy_process()函数将fork()之前的信息复制一份给 子进程。这里包含了出现异常nr=0的情况 3. 如果是vfork的话,直接初始化完成处理信息。 4. 用wake_up_new_task()函数将新创建的进程加入到调度器中,为其原创 2022-03-02 09:53:06 · 680 阅读 · 0 评论 -
linux 安全模块开发基础知识
linux 安全模块开发一、内核编译与调试1. 编译内核进入到下载好的Linux内核文件中,将配置文件中的选项清空make allnoconfigmake menuconfig 进入配置文件菜单选项,将以下选择勾选64-bit kernel ---> yesGeneral setup ---> Initial RAM filesystem and RAM disk (initramfs/initrd) support ---> yesGeneral setup原创 2022-03-02 09:23:40 · 514 阅读 · 2 评论 -
LSM内核模块实现demo
一、demo编写1. 基本步骤确定hook点,这一步在原理解析中有分析,主要是根据sys_call,确定hook调用点按照自己的逻辑结构将hook函数实现,函数名可以不一样(我这里是实现的inode_create),可以根据想要实现的hook进行编写int huhu_inode_create (struct inode *dir, struct dentry *dentry, umode_t mode){ printk ("[+huhu] call [inode_create] by p原创 2021-08-23 15:58:57 · 967 阅读 · 0 评论 -
LSM框架原理解析
一、基本原理LSM框架的产生是为了提高Linux内核的安全性,其通过在内核中代码中设置一系列的hook函数点,在进行系统调用前进行相关函数的check,比如在sys_read系统调用中的hook函数为file_permission,进程产生中的hook函数为task_alloc。hook函数的作用,如下图所示,在DAC检查完之后,进行hook函数调用,进行自定义的权限的检查。二、实现原理1. 在内核源码中静态插桩(以sys_clone为例,其函数调用链如下)sys_clonedo原创 2021-08-23 15:16:02 · 1065 阅读 · 0 评论 -
从sys_read分析LSM框架运行过程
sys_read实现过程sys_read interfaceasmlinkage long sys_read(unsigned int fd, char __user *buf, size_t count);read - implementSYSCALL_DEFINE3(read, unsigned int, fd, char __user *, buf, size_t, count){ /* 1. 文件描述符 struct fd {原创 2021-08-23 14:12:17 · 312 阅读 · 0 评论 -
Mit6.828(一、实验环境准备)
Mit6.828(一、实验环境准备)a. 确保编译环境测试代码,确保相应的命令能够执行,不行的话,安装相应的包objdump -igcc -m32 -print-libgcc-file-name安装下列工具sudo apt-get install -y build-essential gdbsudo apt-get install gcc-multilib编译qemu需要的依赖sudo apt-get install libsdl1.2-dev libtool-bin li原创 2021-05-28 15:44:18 · 535 阅读 · 0 评论 -
Linux创建进程的源码分析
进程的创建进程创建流程a. do_fork主要处理clone、fork、vfork系统调用 1. 先检查父进程的ptrace字段,如果父进程被跟踪了,则根据clone_flag的信息,对子进程进行相关操作 2. 调用copy_process()函数将fork()之前的信息复制一份给 子进程。这里包含了出现异常nr=0的情况 3. 如果是vfork的话,直接初始化完成处理信息。 4. 用wake_up_new_task()函数将新创建的进程加入到调度器中,为其原创 2021-05-21 09:19:33 · 517 阅读 · 0 评论 -
task_struct 结构分析
a. task_struct大概内容thread_info 进程的基本信息mm_struct 指向内存区描述符的指针tty_struct 与进程相关的ttyfs_struct 当前目录files_struct 指向文件描述符的指针signal_struct 所接收的信号b. task_structstruct task_struct { /* 1. state: 进程执行时,它会根据具体情况改变状态。进程状态是进程调度和对换的依据。Linux中的进程主要有如下状态:原创 2021-05-21 09:16:48 · 1359 阅读 · 1 评论 -
linux内存的寻址方式
linux内存的寻址方式1. 为什么需要内存管理效率问题可能你会想到当c程序跑的时候把b程序数据写到磁盘上,等运行b的时候再数据从磁盘写回来,先不说无法满足b,c程序并行跑的需求,就连频繁的io操作带来的耗时问题也是无法接收的。进程地址隔离问题除了效率问题,reserved给进程的空间如果需要被别的进程访问会出现崩溃。比如a进程访问的空间是前10M,但是a程序中有一段代码访问10-110M的话就有可能导致b程序的崩溃,所以进程的地址空间需要彼此隔离。重定位问题现实场景中不可能是原创 2021-05-17 11:12:46 · 255 阅读 · 0 评论 -
Linux添加系统调用
Linux添加系统调用前提知识(系统调用如何执行) 先看文章 裁剪Linux内核,用qemu进行调试我们通常写的c,有相对应的开源的标准库glibc,(2.23的glibc中还是有很多缺陷的)其中的头文件unistd.h就包含了许多的系统调用,如read/write/open等等系统调用是通过的修改寄存器eax的值,然后通过触发 软中断使系统进入内核空间,比如32位下经典的int 80以及64位的syscall。如果你想更清楚的了解系统调用可以查看我之前写的 ret2syscall 。所以内核原创 2021-05-17 08:56:25 · 622 阅读 · 0 评论 -
裁剪Linux内核,用qemu进行调试
1. 内核编译进入到下载好的Linux内核文件中,将配置文件中的选项清空make allnoconfigmake menuconfig 进入配置文件菜单选项,将以下选择勾选64-bit kernel ---> yesGeneral setup ---> Initial RAM filesystem and RAM disk (initramfs/initrd) support ---> yesGeneral setup ---> Configure stand原创 2021-05-13 22:51:08 · 565 阅读 · 3 评论 -
ftrace(二、关键文件介绍)
关键的文件介绍(用到再添加用法)指定要跟踪的函数echo :mod:c1 > set_ftrace_filter #跟踪c1中的函数,前提是c1要在内核中加载#也可以指定函数进行跟踪echo hello_init > set_ftrace_filter显示和配置当前的tracercat available_tracerscat current_tracer echo function_graph > current_tracer cat current_tr原创 2021-05-14 10:44:11 · 623 阅读 · 0 评论 -
ftrace(一、简单使用)
1. 初识工作目录cd /sys/kernel/debug/tracing#权限问题,进入不了debug的sudo chmod -R 777 debug查看可以使用的tracerhuzai@ubuntu:/sys/kernel/debug/tracing$ cat available_tracers hwlat blk mmiotrace function_graph wakeup_dl wakeup_rt wakeup function nop选择需要使用的tracer(这原创 2021-05-14 09:38:48 · 1308 阅读 · 0 评论 -
跟踪Linux命令执行经过系统调用(用户态)
a) strace(用户)用法strace ls #直接在终端上显示执行ls,需要执行的系统调用strace -o strace.log ls #将信息输入到log中,方便后续的分析对输出内容的理解#1.第一部分为加载执行该命令需要的环境依赖(加载/etc 配置文件、libc库)openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libs原创 2021-05-14 08:11:38 · 742 阅读 · 0 评论