一、模块的编译、生成、测试、删除

1.编写模块代码

编写:gedit test.c
查看:cat test.c

Linux及安全——模块

2.查看版本信息

Linux及安全——模块

3.编写Makefile

Linux及安全——模块

obj-m :这个变量是指定你要声称哪些模块模块的格式为 obj-m := <模块名>.o
modules-objs :这个变量是说明声称模块modules需要的目标文件 格式要求   <模块名>-objs := <目标文件>
       切记:模块的名字不能取与目标文件相同的名字。如在这里模块名不能取成 mymod;
KDIR   :这是我们正在运行的操作系统内核编译目录。也就是编译模块需要的环境
M=     :指定我们源文件的位置
PWD   :这是当前工作路径$(shell   )是make的一个内置函数。用来执行shell命令。

4.make

Linux及安全——模块

5.加载、测试模块

Linux及安全——模块

Linux及安全——模块

6.删除模块

Linux及安全——模块

二、页表

对64位的CPU来说,两级页表仍然太少,一个页表会太大,这会占用太多宝贵的物理内存。Linux采用了通用的四级页表。实际采用几级页表则具体受硬件的限制。

Linux及安全——模块

上图中展示的4种页表分别是:
• 页全局目录(Page Global Directory)
• 页上级目录(Page Upper Directory)
• 页中间目录(Page Middle Directory)
• 页表(Page Table)

1.编写代码

Linux及安全——模块

2.编写Makefile

Linux及安全——模块

3.make

root权限执行make指令

回到用户权限,查看page.c,得以分配相应进程

4.找到gedit的进程号

Linux及安全——模块

4.查看gedit相应地址与相应信息

根据十六进制数8062448找到该进程线性地址。

Linux及安全——模块

5.转换为十进制,加载模块

Linux及安全——模块

Linux及安全——模块

6.测试

使用tail 查看kern.log 文件或者dmesg指令(显示开机信息,查看日志)可以看到我们在函数里输出的部分或全部内容

Linux及安全——模块

 

Linux及安全——模块

Linux及安全——模块

输出内容一致。

最后要卸载的话输入:sudo rmmod page

相关文章:

  • 2022-02-23
  • 2021-09-03
  • 2022-12-23
  • 2022-02-28
  • 2022-12-23
  • 2021-07-21
  • 2021-10-26
  • 2021-08-04
猜你喜欢
  • 2022-03-03
  • 2022-12-23
  • 2022-12-23
  • 2021-09-20
  • 2022-03-02
  • 2021-10-04
  • 2021-12-08
相关资源
相似解决方案