【构建调试Linux内核网络代码的环境MenuOS系统】教程文章相关的互联网学习教程文章

Linux内核文件详解【代码】

Linux内核文件主要有三个,vmlinuz,initrd.img和System.map。对于内核学习的人来说,这三个文件非常重要。1.vmlinuz vmlinuz是可引导的、压缩的内核。“vm”代表“Virtual Memory”。Linux 支持虚拟内存。 vmlinuz的建立有两种方式。一是编译内核时通过“make zImage”创建。zImage适用于小内核的情况,它的存在是为了向后的兼容性。二是内核编译时通过命令make bzImage创建。bzImage是压缩的内核映像,需要注意,bzImage不是用bz...

Linux内核开发双机调试(KGDB)【代码】【图】

学习linux内核是很多程序员的梦想,内核错误往往会导致系统宕机,很难保留出错时的现场,对于开发linux内核和驱动调试,一般需要双机调试环境,KGDB是在内核2.6.26版本中正式支持的,可以方便调试内核和驱动。前期准备 1.vmware虚拟机,安装centos6操作系统(内核版本2.6.32),对于学习低版本内核更合适2.安装开发工具链 sudo yum groupinstall "Development Tools"3.安装ncurses:sudo yum install ncurses-devel 因为make me...

Linux内核开发学习笔记(二)【图】

Linux内核开发学习笔记(二) 3.内存寻址4.Linux中的进程 学习视频资源链接:https://www.bilibili.com/video/BV1mZ4y1s7a5?p=7 代码资源链接:http://wwww.kerneltravel.net/journal/ii/index.htm 3.内存寻址 CPU、MMU、内存和磁盘间进行交互。 MMU的工作原理:虚拟地址->线性地址(段机制)->物理地址(分页机制)。 (1)段机制(段描述符表(段表)) 段描述符表:由段号,基地址,界限,属性组成。 其中,线性地址=段的起始地址...

记一次Linux内核崩溃:kdump,crash,vmcore【代码】

记一次Linux内核崩溃:kdump,crash,vmcore scofield 菜鸟运维杂谈 原理Linux内核发送崩溃时,kdump会生成一个内核转储文件vmcore。可以通过分析vmcore分析出内核崩溃的原因。crash是一个被广泛应用的内核奔溃转储文件分析工具。使用crash调试内核转储文件,需要安装crash工具和内核调试工具kernel-debuginfo。 安装需要的软件1、查看系统内核[root@qd01-stop-free015 ~]# uname -r 3.10.0-1160.15.2.el7.x86_64 2、安装kdump,cr...

Linux内核发家史【图】

Kernel:操作系统内核 fd:文件描述符,Linux一切皆文件,不管是文本文件还是网络 Socket 都有其文件描述符。其实就是文件的一个索引值,任何一个进程都有文件描述符 一、BIO 客户端连接过来,假设是文件描述符 fd 8,用户空间的一个线程过去read fd 8 阻塞等着处理,有数据就处理,没数据就阻塞等待;这个弊端很明显,线程很可能空闲着,浪费资源。socket 在这个时期是 blocking 的二、NIO 为了避免浪费资源,现在假设我们的 CPU ...

Linux内核源码结构组成

一、Linux内核的特征 1.linux内核组织形式为整体式结构 linux内核是面向过程的,每一个模块单独编译,最后链接成一个独立的目标程序。这种结构最大的特点是内部结构简单,子系统容易进行访问,因此内核的工作效率比较高。基于过程的结构有助于不同业务的成员进行基于不同业务的开发,基于这种角度,linux内核又是开放式的开发,它允许任何人对其不同模块进行完善和再次开发。 2.进程调度方式简单而有效。 可以说l...

Linux内核学习-使用exec创建socket【代码】

1. cd /proc/$$/fd -> 进入当前process的fd目录 2. exec 8<> /dev/tcp/www.baidu.com/80 -> 创建socket[mengbao@minitana fd]$ ls -l total 0 lrwx------ 1 mengbao mengbao 64 Mar 7 20:21 0 -> /dev/pts/1 lrwx------ 1 mengbao mengbao 64 Mar 7 20:21 1 -> /dev/pts/1 lr-x------ 1 mengbao mengbao 64 Mar 7 20:21 19 -> anon_inode:inotify lrwx------ 1 mengbao mengbao 64 Mar 7 20:21 2 -> /dev/pts/1 lrwx------ 1 m...

567_linux内核学习_signal.c文件的泛读与分析【图】

全部学习汇总: https://github.com/GreyZhang/little_bits_of_linux 这次,把signal.c的文件全都看一下,粗略泛读。后面应该也是这么个模式,不会像之前分的那么细了。 这一部分,其实之前是看过了的。 这部分,前面也看过了。主要是信号挂起的处理,我觉得技巧点应该是在于形参处理与寄存器操作的结合。 这两个函数,从命名看的话我们需要站在内核的角度来看。存储以及获取其实都是内核的动作。...

arm64架构linux内核地址转换__pa(x)与__va(x)分析【代码】

本文基于:linux-5.11 在基于arm64架构的linux内核中, 有两个 表示__pa(x)和__va(x)用于物理地址转换位虚拟地址 或者 虚拟地址转换为物理地址(实际上还有一个__pa_symbol(x))。 这两个表达式是如何进行虚/实地址转换的?这种转换关系是如何确立的?为什么这样转换? 本文就这些问题进行挖掘探究。 一、层层展开,还原__pa(x)全貌 表达式__pa(x)是一个宏,定义在arch/arm64/include/asm/memory.h文件中:#define __pa(x) __virt...

在Linux内核接收路径查找top 1的IP地址【代码】【图】

在实际工作中,我终于遇到了一些实实在在的面试题: 算法题:一个包含海量节点的无序链表,已知里面有多个重复元素,找出重复次数最多的那个,给出时间复杂度。比如20-1-2-3-5-7-3-20-12-3,重复元素有3个3,2个20答案显然是3。 在进行流量分析,DDoS检测与防护,流量清洗等动作时,一个很常见的需求就是“求top N”,与之相关的算法可谓汗牛充栋: 排序最大堆LRUBitmap counter… 理论算法很多,但在实战中总是会碰到各种工程问题...

linux内核的一些知识点(上)【图】

前言 应用层通常专注于API的使用,认为将其看成是一个黑盒即可,但了解操作系统的一些机制将有助于我们更好地使用它,也有助于避免犯错误。 unix系统 1969年,unix从贝尔实验室诞生,由一个失败的操作系统multics发展而来,它发布时带上了源码,以至于很多组织都对其进一步改进。它由C语言编写,且只有几百个系统调用,秉承一切皆文件的设计思想。 linux系统 由芬兰大学生linus在1991年开发,基于Intel80386微处理器,开发完后就在...

linux 内核task_struct 源码分析与解析(整合配图)【代码】

本文来自个人网站 https://htmonster.xyz/blog/post/linux-nei-he-task-struct-yuan-ma-fen-xi-yu-jie-xi/文章目录 进程状态0. 进程标志符1. 运行状态2. 进程标记 任务状态1. 任务终止2.ABI处理3.execve4.io等待 进程内核栈地址内核栈布局进程调度1.优先级2. 调度策略3. 进程调度调度器调度器策略实体调度器、策略、调度实体关系 4. 就绪队列5. 其它信息 进程地址空间进程描述符mm_struct核心分析(mm_struct图解进程亲属关系时间与...

linux内核hook技术之函数地址替换【代码】

前言 函数地址替换是一种更为简单、常见的hook方式,比如对security_ops、sys_call_table等结构中的函数进行替换,来完成自己的安全权限控制。 其中security_ops是LSM框架中所使用的,sys_call_table是系统调用表结构。当然了,这些结构目前在内核中都已经是只读数据结构了,如果想直接进行函数替换的话,首先就是考虑解决关闭写保护的问题。在下面的模块例子中,演示了重置cr0寄存器写保护位 及其 修改内存页表项属性值两...

linux内核hook技术之跳转指令偏移值【代码】【图】

前言 在另一篇博文中提到了指令覆盖和指令注入的hook方式,使用覆盖和注入方式完成内核函数hook,需要有很多的注意事项,而且容易被检测工具检测。这篇博文则聊一下如何通过替换跳转指令偏移值来完成内核函数的hook,这种hook技术也可以称为inline hook。 事先做个准备工作,手头正好有centos 6系列操作系统,还有一个热腾腾刚出锅的vmlinux。通过 gdb vmlinux,所示如下: 如图片所示,sys_open通过call指令调用了do_...

linux内核hook技术之指令覆盖与注入【代码】

前言 说到hook,传统意义上,大家都会觉得跟注入和劫持挂钩。在linux内核中,也可以通过指令覆盖和注入的方式进行hook,来完成自己的业务逻辑,实现自己的功能需求。 一部分人喜欢称这种hook技术为inline hook。 如何hook 具体hook细节在以下编写的驱动例子程序中给出了,例子中标注了详细的注释,大家可对照着代码查看。 例子程序在centos 6系统上编译并测试通过了,如果换成其他系统,部分代码可能需要进行微调,...