Linux kernel KASLR(一)

写本文的目的是,其一是工作需求,其二就是网上所有关于ASLR相关的文章基本都只讲解其中的概念以及一些场景应用,并没有详细解析相关实现具体过程的,所以一时兴起,写了这一篇文章,希望能够给有这方面需求的人,或者感兴趣的人提供一些帮助。 
首先,我们需要一个config, 这个config是default 的有了这个config,就能生成地址随机化的kernel了 
arch/x86/Kconfig 
这个config会添加一个link flag,如图所示,这个flag的作用是使每个section会生成对应的rela section,其中记录每个对应section中需要relocation的symbol在文件中的位置。 
arch/x86/Makefile 
接下来我们来compile一下image。 
shell 
shell 
shell 
编译的是基于x86_64架构的bzImage,我们先通过readelf查看目录下的vmlinux,可以看到我们需要的rela section,如图 
readelf 
readelf

部分rela section内容如下图所示

.rela.text 
vmlinux是未经压缩的Linux内核,是编译出来的最原始的文件。 
接下来再来看看如何对该文件进行进一步的处理。 
来到arch/x86/boot/compressed目录下,打开Makefile,这个Makefile主要用来编译压缩后的内核image的,具体如何生成压缩后的image,可以参考《深度探索Linux操作系统:系统构建和原理解析》,这本书讲解的非常详细。在这里我们只关注relocation相关的部分。 
Makefilerela 
如上图所示,主要生成vmlinux.relocs文件,这个文件包含了所有需要relocation符号的信息,由上图可以看到是使用relocs这个工具对 vmlinux进行处理,现在我们看看这个工具的具体工作内容。

int main(int argc, char **argv)
{
    int show_absolute_syms, show_absolute_relocs, show_reloc_info;
    int as_text, use_real_mode;
    const char *fname;
 
  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值