首页 文章详情

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

嵌入式杂牌军 | 254 2021-10-25 00:51 0 0 0
UniSMS (合一短信)

扫描二维码

获取更多精彩

嵌入式杂牌军

                                                     

                                                编辑|追梦星空

                                           公众号|嵌入式杂牌军


✎ 编 者 悟 语

    

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


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


文 章 导 读


    最近在看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语言专辑


软实力专辑


软件推荐专辑


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


good-icon 0
favorite-icon 0
收藏
回复数量: 0
    暂无评论~~
    Ctrl+Enter