Linux内核中一种利用宏对变量赋值的方式

嵌入式杂牌军

共 2143字,需浏览 5分钟

 ·

2021-10-25 00:51

扫描二维码

获取更多精彩

嵌入式杂牌军

                                                     

                                                编辑|追梦星空

                                           公众号|嵌入式杂牌军


✎ 编 者 悟 语

    

      过去的时间总是可以对上的,只是更多的时候我们关心的是做成了或没做成什么,可能会有所失,但却容易忽略了这“”有所失“”是如何造成的。很多事不可能“”严丝合缝”的去完成,时间不可能完全的被利用,时间总是会掺入一些沙子,你的双手并不能抓住所有。你给了自己余暇就要接受那沙子的意义,但要注意每个人时间里掺入沙子的意义是不同的。


     上升之人一直处于半逆境之中;生命回落,逆向生长。


文 章 导 读


    最近在看Linux内核关于内存管理相关的内容,在内核源码中看到有一种利用宏对变量进行赋值的一种方式,感觉很不错,可以借鉴一下哈,分享出来以便大家推而广之!

    阅读过程中有什么问题可以后台交流哈,


1 代码背景介绍



    0)科普——什么是缓冲区溢出攻击


    缓冲区溢出是指写入缓冲区的数据量超过缓冲区的设计大小,溢出的数据覆盖了相邻存储单元中的数据。


    攻击方式:攻击者通过溢出缓冲区将恶意代码注入内存,使进程运行时跳转并执行恶意代码来进行攻击。


    缓冲区溢出攻击主要分为栈溢出、堆溢出、格式化字符串溢出和整型变量溢出等,其中以栈溢出最为常见。


    1)代码的目的


    为了让Linux内核更加安全,为了让缓冲区溢出攻击变得困难,Linux内核对内存映射区域、栈和堆添加了可以选择起始地址随机属性的开关。


    2)代码区域随机属性起作用的条件

   

    ① 首先要看进程描述符成员personality是否设置了ADDR_NO_RANDOMIZE


    ② 全局变量randomize_va_space所赋的值是多少。


2 实际代码



    1)代码的位置


    mm/memory.c文件中100行左右。


    2)全局变量可能的赋值

    

    ① randomize_va_space = 0。


    关闭虚拟地址空间随机化,即对上面的区域起始地址不进行随机化处理


    ② randomize_va_space = 1。


    使内存映射区和栈的起始地址随机化(两个区域的随机化处理)。


    ③ randomize_va_space = 2


    使内存映射区域、栈和堆的起始地址都进行随机化处理(三种区域全部随机化处理)。


    3)实际代码


/*
 * Randomize the address space (stacks(栈), mmaps(内存映射区), brk(堆), etc.).
 *
 * ( When CONFIG_COMPAT_BRK=y we exclude brk from randomization,
 *   as ancient (libc5 based) binaries can segfault. )
 */
int randomize_va_space __read_mostly =
#ifdef CONFIG_COMPAT_BRK
     1;
#else
     2;
#endif


    代码很简单,通过CONFIG_COMPAT_BRK定义与否,来对randomize_va_space进行赋值控制。


    补充说明:


#define __read_mostly  __attribute__((__section__(".data..read_mostly")))


    randomize_va_space后面的__read_mostly是将randomize_va_space指定存放到.data..read_mostly段中。


    定义到这个段的数据,再linux内核被加载时,数据会自动被存放到cache中,以提高整个系统的执行效率。


    需要注意的是平台没有cache,或者有cache,但是并没有提供存放数据的接口就不能用__read_mostly指定数据自动放到cache了

    今天就到这吧,希望对小伙伴有所帮助哈,喜欢的话欢迎转发、点赞、分享、在看、转载哈,


免责声明:本文内容源于网络、技术手册或相关书籍,版权归原作者所有。如涉及侵权问题,请与我联系删除。


相关推荐


uboot(bootloader)相关的知识点汇总


推荐一款Linux下好用的截图工具shutter——shutter的安装、配置与使用


Linux中消息队列的使用


Linux下的共享内存编程


专辑分享


Linux专辑


C语言专辑


软实力专辑


软件推荐专辑


    欢迎关注我的公众号,一起撸代码,玩技术!


浏览 34
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报