咱们最近录制一期特工队节目,寰球独家的视频节目,全程2.5小时,这个视频节目是围绕这样一个试验来进行的。咱们在这期视频节目中重点介绍:
ARM64体系结构中的内存治理
ARM64的页表治理
ARM64 的Linux内核如何walk through页表
ARM64的Linux内核零碎调用是如何实现的?
如何面对宕机?本试验讲会面临4次不同的宕机。
详细分析宕机的log
利用kdump来手撕宕机问题
笨叔保障,在寰球的视频网站和培训机构上也找不到这样有深度和广度的视频,只有笨叔的旗舰篇视频有哟!喜爱的连忙点本文最初面的“浏览原文”来订阅吧。
这个试验是酱杨紫的:
“假如你是一名平安人员,正在执行一项机密工作,这项机密工作就是要深刻到敌军的作战指挥核心的计算机里装置一个窃听的程序,简略来说就是把计算机的零碎调用动静替换掉。假如你的共事曾经帮你把敌军计算机的root明码给破解了,接下来就看你如何动静批改零碎调用了。留神:编写的内核模块不能让敌军的计算机重启、crash/panic,否则就裸露行踪,秘密行动失败。
1)编写一个内核模块。
试验环境:ARM64体系结构,Linux 5.0内核。
要求替换零碎调用表(sys_call_table)中某一项零碎调用,替换成本人编写的零碎调用处理函数(例如:my_new_syscall()),在新的零碎调用函数中打印一句“hello, I have hacked this syscall”,而后再调用回原来的零碎调用处理函数。
比方以ioctl零碎调用为例,它在零碎调用表中的编号就是__NR_ioctl。那么须要批改零碎调用表sys_call_table[__NR_ioctl]的指向,让其指向my_new_syscall()函数,而后在my_new_syscall()函数中打印一句话,调用原来的sys_call_table[__NR_ioctl]指向的处理函数。
2)卸载模块时候把零碎调用表复原原样。
3)用clone零碎调用来验证你的驱动,clone零碎调用号是__NR_clone。
”
这个试验来自一个理论的我的项目,最开始是笨叔的VIP微信群里一个敌人在国庆节期间问笨叔的一个问题。他们说这个问题困扰了他们良久,他们的试验平台是某鹏的ARM64服务器芯片,怎么折腾总是死机,于是救助与笨叔。笨叔看了看他们的代码,喝了一杯二锅头的工夫就把这个问题fix了。起初,笨叔感觉这个问题对学习linux驱动和内核的小伙伴很有帮忙,特地是对加深了解ARM64的体系结构,ARM64内存治理、零碎调用、如何面对死机等问题,于是,笨叔在那个VIP敌人的问题根底上做了批改和形象,做成一个试验share给大家。
笨叔让小笨笨同学来做这个试验。
风华正茂的小笨笨同学
笨叔先给小笨笨介绍一些ARM64体系结构的常识。
小笨笨开始入手写内核模块了,花了一个下午,写好了一个驱动模块。
然而呢,这个驱动一跑起来就死机,而且整个过程会有4次不同的宕机。
第一次宕机,小笨笨同学就懵了。。。
在笨叔的指导下,fix了第一次宕机。
从新编译好内核模块之后,一跑,又马上第二次宕机了。
小笨笨同学这可傻眼了,在笨叔给他解说了零碎调用的一些基本原理之后,马上fix了第二次宕机。这回小笨笨同学把ioctl零碎调用号改成clone号,从新编译好内核模块之后,一跑,又马上第三次宕机了。
小笨笨同学这回哭了,叔叔,我不玩了~~~~
我把小笨笨同学哄着:小笨笨,不怕,咱们来仔细分析死机log,你看看,你只把第一个page的只读属性改成了可写,然而呢,因为clone零碎调用号是220,每个零碎调用号在零碎调用表sys_call_table中占8个字节,然而呢,这个表没有依照page大小对齐来寄存的,所以呢,这个clone可能寄存到了第2个page里,你发现了吗?小笨笨同学。
小笨笨同学看了看笨叔,叔,如同是这么回事。叔,你真帅!
小笨笨很快就批改好了代码,上机一跑,如同不宕机了。
笨叔:小笨笨,你这个驱动写的好不错,然而呢,咱们须要在卸载模块的时候,把零碎调用表复原原样。
小笨笨马上去批改卸载模块函数,上机一跑,又宕机了~~,这回小笨笨真的哭了:叔,真的好难啊,为啥我一批改,就死机。
小伙伴,你有趣味和小笨笨一起来玩这个试验吗?
笨叔录制了2个多小时的高清视频来具体解说这个试验,有趣味的同学能够点击“浏览原文”来订阅笨叔的旗舰篇合集视频。
另外咱们精心制作了400多页的试验领导手册,独家供给,收费提供大家下载。
下载方法:
登录“奔跑吧linux社区”微信公众号,在微信公众号里输出“试验领导手册”即可。