首页
学习
活动
专区
圈层
工具
发布

揭露内核黑科技 - 热补丁技术真容

内核热补丁是一种无需重启操作系统,动态为内核打补丁的技术。系统管理员基于该技术,可以在不重启系统的情况下,修复内核BUG或安全漏洞,可以在最大程度上减少系统宕机时间,增加系统的可用性。...一直很好奇内核热补丁这个黑科技,今天终于可以揭露它的真容了。当然这章的内容强烈依赖于前一章探秘ftrace[1]。有需要的小伙伴请自取。...感谢内核社区开发着贴心的服务,在内核代码中,就有热补丁的例子在samples/livepatch目录下。 我们来看一个非常简单的例子,因为太简单了,我干脆就把整个代码都贴上来了。 ?...我想,有一些内核开发经验的小伙伴,从这个例子中就可以猜出这个代码的作用。...a = 3; a = a + 3; add(a, 2); return 0; } 验证返回地址在堆栈上 使用gdb在add返回前停住,然后用下面的指令查看状态

3.3K50
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    PSKP - 进程上下文特定内核补丁

    分页表这个看似微不足道的事实是我的进程特定内核补丁理论的基础。通过重建特定内核地址的分页表,可以在内核与其进程中的内核映射之间产生差异。...可能性 ---- 进程特定的内核补丁可用于修补特定进程的句柄表,以将句柄权限从 PROCESS_QUERY_INFORMATION 更改为 PROCESS_ALL_ACCESS。...此类补丁仅在您当前的上下文中可见,因此如果从另一个上下文调用 ExEnumHandleTable 仍将显示 PROCESS_QUERY_INFORMATION。...虽然这不是补丁保护绕过,但您可以使用它来内联挂钩系统调用、修补 SSDT,甚至仅在当前进程中的 IDT。补丁守卫可能会追上你,但在你被抓住之前的时间量是未知的(但比正常时间长)。...我希望你可以将这些知识应用到一些很酷的东西上,比如特定于进程的系统调用或特定于进程的 IDT 补丁。

    1.6K10

    Ubuntu打实时内核补丁(RT-PREEMPT kernel)

    RT-Preempt Patch是在Linux社区kernel的基础上,加上相关的补丁,以使得Linux满足硬实时的需求。下面是编译RT linux内核的流程,以内核3.18.59为例。...流程 下载代码 rt补丁下载 https://www.kernel.org/pub/linux/kernel/projects/rt/ 内核源码下载 https://www.kernel.org/pub.../linux/kernel/v3.0/ 下载的内核和补丁版本号必须严格对应 打补丁 解压linux源码linux-3.18.59.tar.gz,把补丁文件patch-3.18.59-rt65.patch.gz...进入内核目录打补丁,所以使用p1 配置内核 make localmodconfig make menuconfig make localmodconfig 根据目前系统内核的配置生成配置文件 .config...,如下图, 校验 重新启动系统,uname -a命令查看 有PREEMPT RT 字样内核替换成功。

    4K10

    【Linux 内核】编译 Linux 内核 ⑦ ( 安装内核模块 | 安装内核 | 重启系统 | 查看当前内核版本 )

    文章目录 一、安装内核模块 二、安装内核 三、重启系统 四、查看当前内核版本 一、安装内核模块 ---- 确保 Linux 内核编译完成 , 没有任何报错之后 ; 参考 【Linux 内核】编译 Linux...内核 ⑥ ( 安装 OpenSSL | 安装其它依赖库 | 内核编译完成 ) 博客 ; 进入 Linux 内核源码的根目录 , 执行 sudo make modules_install 命令 , 安装编译好的内核模块...---- 内核模块安装完成后 , 执行 sudo make install 命令 , 安装内核 ; 下面的内核安装过程会持续很长时间 ; 内核安装过程 : root@ubuntu:~# cd...memtest86+.bin done root@ubuntu:~/kernel/linux-5.6.14# 三、重启系统 ---- 执行 reboot 命令 , 重启 Ubuntu 操作系统 ; 四、查看当前内核版本...---- 重启之后 , 在命令行终端执行 uname -a 命令 , 查看当前的内核版本 , 发现当前内核版本已经

    21K50

    与Thomas Gleixner对谈实时Linux内核补丁集

    JP:为什么现在它仍然是一个独立于主线内核的项目? TG:为了将实时补丁集成到 Linux 内核中,必须首先做大量的准备工作、重组和巩固主线代码库。...只要这些剩余的补丁不在主线内核中,这就不是问题,因为它不会给主线内核带来任何负担或限制。责任在实时项目上,但在另一方面,在这个上下文中,没有任何限制可以走上游内核永远不能接受的捷径。...JP:为 Linux 开发实时子系统或专门的内核有什么挑战?它与内核的其他项目运行有什么不同吗? TG:没有什么不同;同样的规则适用。补丁必须发布、审查和讨论。然后反馈被合并。...循环开始,直到每个人都同意解决方案,补丁被合并到相关的子系统树中,最后在主线内核中结束。 但正如我之前解释的那样,它需要大量的注意和努力,通常还需要大量的额外工作来重构现有代码,以便集成特定的补丁。...JP:哪些公司一直在支持 PREEMPT_RT Linux 内核补丁的上游工作?

    2.2K30

    【Linux 内核】编译 Linux 内核 ⑤ ( 查看 .config 编译配置文件 | 正式编译内核 )

    文章目录 一、查看 .config 编译配置文件 二、正式编译内核 一、查看 .config 编译配置文件 ---- 在上一篇博客 【Linux 内核】编译 Linux 内核 ④ ( 打开 Linux...内核编译 菜单配置 |菜单配置中的光标移动与选中状态 | 保存配置 | 配置项帮助文档 ) 中 , 已经将编译配置保存到了 .config 文件中 ; 查看 .config 编译配置文件 , 在 linux...内核源码根目录中 , 执行 gedit .config 命令 , 查看 .config 编译配置文件 : ( 也可以使用 vi , vim 等文本编辑器查看 ) 在 .config 配置中 , #...CONFIG_PREEMPT_VOLUNTARY=y # CONFIG_PREEMPT is not set # # CPU/Task time and stats accounting # 二、正式编译内核...---- 在 Linux 内核源码根目录 , 执行 sudo make j4 开始编译 Linux 内核 ;

    16.4K40

    如何提交你的第一个 Linux 内核补丁

    本文中,为了便于在 Linux 内核中提交你的第一个贡献,我将为你提供一个必需的快速检查列表,以告诉你在提交补丁时,应该去查看和了解的内容。...对于你贡献的第一个补丁的提交流程方面的更多内容,请阅读 KernelNewbies 的第一个内核补丁教程。 为内核作贡献 第 1 步:准备你的系统。...提交你的第一个补丁之前,你应该知道的事情 Greg Kroah-Hartman 的 staging tree 是提交你的 第一个补丁 的最好的地方,因为他更容易接受新贡献者的补丁。...阅读 归档的内核邮件。 为找到灵感,你可以去遍历 linux.git 日志去查看以前的作者的提交内容。 注意:不要与你的补丁的审核者在邮件顶部交流!...Eudyptula challenge 是学习内核基础知识的非常好的方式。 想学习更多内容,阅读 KernelNewbies 的第一个内核补丁教程。

    1.7K10

    【Linux 内核】编译 Linux 内核 ② ( 解压内核源码 | 查询当前 Linux 内核版本号 | 进入并查看 linux 内核源码目录 )

    文章目录 一、解压内核源码 二、查询当前 Linux 内核版本号 三、进入并查看 linux 内核源码目录 一、解压内核源码 ---- 将 下载的 Linux 内核源码 linux-5.6.14.tar.gz...拷贝到 Ubuntu 虚拟机中 , 执行 tar xvf linux-5.6.14.tar.gz 命令 , 解压 Linux 内核源码 ; 解压完毕后 , linux-5.6.14 目录中就是解压后的...Linux 内核源码 ; 二、查询当前 Linux 内核版本号 ---- 执行 uname -a 命令 , 查询当前 Ubuntu 系统的 Linux 内核版本号 , 执行过程如下 : root@ubuntu...23:25:58 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux root@ubuntu:~/kernel# root@ubuntu:~/kernel# 当前的内核版本号是...4.13.0 ; 三、进入并查看 linux 内核源码目录 ---- 进入之前解压的 linux-5.6.14 内核源码目录 ; root@ubuntu:~/kernel# ls linux-5.6.14

    92.8K60

    查看Linux系统版本内核命令的方法

    image.png Linux系统内核、发行版本有很多,那么如何查看当前Linux系统的内核信息、Linux系统发行版本等信息呢?...:lsb_release -a,即可查看当前系统版本的详细信息 命令二:查看当前系统内核信息 执行命令:uname -a,查看当前操作系统的内核信息 命令三:查看当前系统版本信息 执行命令: cat /...proc/version,查看当前操作系统版本信息 命令四:查看CPU相关信息 执行命令:cat /proc/cpuinfo,可以查看Linux的CPU相关信息,包括型号、主频、内核等信息。...命令五:查看系统位数 执行命令:getconf LONG_BIT,查看当前系统位数,32位或者64位。...补充说明: /proc文件系统,它不是普通的文件系统,而是系统内核的映像,也就是说,该目录中的文件是存放在系统内存之中的,它以文件系统的方式为访问系统内核数据的操作提供接口。

    4K30

    寻找为 Linux 内核贡献数千补丁的“超能力者”!

    在 LWN.net 发布的 Linux 内核报告中,常年可以看到一个贡献者 —— “Yue Hai Bing”,自 2018 年底以来,TA 对每个版本都会贡献大量的补丁,帮助 Linux 内核不断迭代...在当时,HULK Robot 以 “Wei Yongjun” 这个身份,在 Linux 内核社区中贡献代码,提交代码修复补丁。...HULK Robot 想要给 Linux 内核贡献代码、提供补丁,却绝非易事。但魏勇军找到了思路。...魏勇军表示,Linux 内核的维护风格是非常社区化的,社区的维护者默认信任每一个提交贡献者都是为了社区的长期发展而贡献代码,因此,社区的维护者并不拒绝机器人参与到内核的维护中。...而 HULK Robot 则为这个事情提供了一种新的思路:可以将资深维护者的经验变成固化的代码,从而使得知识得以传承,而 HULK Robot 的自动化运行机制,又为社区提供了源源不断的贡献和补丁,

    1.2K10

    【Linux 内核 内存管理】Linux 内核内存布局 ① ( 查看 Linux 操作系统位数 | 查看 Linux 操作系统软硬件信息 )

    文章目录 一、查看 Linux 操作系统位数 二、查看 Linux 操作系统软硬件信息 一、查看 Linux 操作系统位数 ---- 在 64 位的 Linux 中 , 使用 48 位 表示 "...虚拟地址空间 " ; 使用 45 位 表示 " 物理地址空间 " ; 执行 getconf LONG_BIT 命令 , 可以查看 Linux 操作系统 是 32 位还是 64 位的 ;...得到结果 64 , 说明该系统是 64 位 Ubuntu Linux 操作系统 ; 二、查看 Linux 操作系统软硬件信息 ---- 执行 cat /proc/cpuinfo 命令 , 可以查看..." Linux 内核位数 “ 和 ” 系统的软硬件信息 " ; 输出内容解析 : vendor_id : GenuineIntel CPU 制造商 GenuineIntel cpu family :...CPU 中的编号 cpu cores : 1 逻辑核心 所在的 物理核心数 apicid : 0 区分不同的逻辑核心编号 , 该编号不一定连续 ; bogomips : 5807.99 Linux 内核启动时测量的

    35.3K20
    领券