一.内核模块原理 1. Linux内核增加功能 Linux内核整体结构很庞大,包含了很多的组件,现在有两种方法将需要的功能包含进内核当中: - 静态加载:将所有的功能都编译进Linux内核. - 动态加载:将需要的功能编译成模块,在需要的时候动态地添加. 第一种方法优点在于不会有版本不兼容的问题,不需要进行严格的版本检查:但是生成的内核会很大,要在现有的内核中添加新的功能,要编译整个内核. 第二种方法有点在于模块本身不编译进内核,从而控制了内核的大小,模块一旦被加载,将和其它的部分完全一样.可能…
20135218 姬梦馨 1.编写模块代码 模块构造函数:执行insmod或modprobe指令加载内核模块时会调用的初始化函数.函数原型必须是module_init(),括号内是函数指针 模块析构函数:执行rmmod指令卸载模块时调用的函数.函数原型是module_exit() 头文件module.h,必须包含此文件: 头文件kernel.h,包含常用的内核函数: 头文件init.h包含宏_init和_exit,允许释放内核占用的内存. 写一个简单的代码,用来向内核输出一段文字. 3.编译模块…
编译生成新内核 一.实践原理 Linux模块是一些可以作为独立程序来编译的函数和数据类型的集合.之所以提供模块机制,是因为Linux本身是一个单内核.单内核由于所有内容都集成在一起,效率很高,但可扩展性和可维护性相对较差,模块机制可弥补这一缺陷. Linux模块可以通过静态或动态的方法加载到内核空间,静态加载是指在内核启动过程中加载:动态加载是指在内核运行的过程中随时加载. 一个模块被加载到内核中时,就成为内核代码的一部分.模块加载入系统时,系统修改内核中的符号表,将新加载的模块提供的资源和符号…
一.编译&生成&测试&删除 1.编写模块代码,查看如下 gedit 1.c(编写) cat 1.c(查看) MODULE_AUTHOR("Z") MODULE_DESCRIPTION(模块用途的简单描述); MODULE_VERSION(模块的版本字符串); MODULE_ALIAS(模块的别名); 2.查看版本信息 3.写Makefile并查看 obj-m :这个变量是指定你要声称哪些模块模块的格式为 obj-m := <模块名>.o module…
一.SSH服务 1. 安装SSH (1)查看是否已经安装过ssh服务 rpm -qa |grep ssh (2)进行安装 sudo apt-get install openssh-server Ubuntu缺省安装了openssh-client,如果没有输入: sudo apt-get install openssh-client 2. 运行SSH服务 (1)开启SSH /etc/init.d/ssh start (2)验证启动成功 ps -e | grep sshd (3)查看ssh服务状态…
一.软件源维护 1. 基本操作 (1)查看源列表 sudo vim /etc/apt/sources.list deb:二进制软件安装包 deb-src:源码包 (2)备份软件源列表 sudo cp /etc/apt/source.list /etc/apt/backup_source.list (3)更新源 sudo apt-get update (4)升级源 sudo apt-get upgrade (5)通过关键字查找安装包 sudo apt-cache search [软件名] (6)安…
一.基本模块的实现: 1.进程遍历打印输出 2.简单地编写一个新的系统调用(替换空的系统调用号) 基本模块学到的知识点: 1.相关指令 make oldconfig 配置内核 make 编译内核 make modules_instal 编译安装内核模块 make install 引导新编译的内核 uname –a 查看内核版本 lsmod 查看加载的模块 insmod 加载模块 rmmod 卸载模块 dmesg 显示开机信息 基础模块一:系统调用(替换空的233) 文件Makefile obj-…
一.基本知识 1. 常用指令机器码 不同版本对应机器码不同,这里以我做实验的kali(Intel 80386)为例. 指令 作用 机器码 nop 无作用(no operation) 90 call 调用子程序,子程序以ret结尾 e8 ret 返回程序 c3 cmp 比较 c3 jmp 无条件跳转 eb je/jz 若相等则跳转 74/84 jne/jnz 不相等则跳转 75/85 mov 传值 89 movl 长字传值 c7 实际上使用更改的主要是跳转指令. 2. 修改工具 (1)反汇编:ob…
一.ELF文件格式概述 1. ELF文件 ELF:Executable and Linking Format,是一种对象文件的格式,用于定义不同类型的对象文件(Object files)中都放了什么东西.以及都以什么样的格式去放这些东西. 2. 三种类型 (1)可重定位文件 编译器和汇编器创建 运行前需要被链接器处理 (2)可执行文件 完成了所有重定位工作和符号解析 除了运行时解析的共享库符号 (3)共享库文件 链接器需要的符号信息 运行时可以直接执行的代码 二.分析一个ELF文件 以一个最简单…