Linux內核中一種利用宏對變量賦值的方式

掃描二維碼
獲取更多精彩
嵌入式雜牌軍

????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??? ? 編輯|追夢星空
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? ? ??公眾號|嵌入式雜牌軍
????
? ? ??過去的時間總是可以對上的,只是更多的時候我們關心的是做成了或沒做成什么,可能會有所失,但卻容易忽略了這“”有所失“”是如何造成的。很多事不可能“”嚴絲合縫”的去完成,時間不可能完全的被利用,時間總是會摻入一些沙子,你的雙手并不能抓住所有。你給了自己余暇就要接受那沙子的意義,但要注意每個人時間里摻入沙子的意義是不同的。
? ? ?上升之人一直處于半逆境之中;生命回落,逆向生長。
文 章 導 讀
? ? 最近在看Linux內核關于內存管理相關的內容,在內核源碼中看到有一種利用宏對變量進行賦值的一種方式,感覺很不錯,可以借鑒一下哈,分享出來以便大家推而廣之!
? ? 閱讀過程中有什么問題可以后臺交流哈,
!
1 代碼背景介紹
????0)科普——什么是緩沖區(qū)溢出攻擊
????緩沖區(qū)溢出是指寫入緩沖區(qū)的數(shù)據(jù)量超過緩沖區(qū)的設計大小,溢出的數(shù)據(jù)覆蓋了相鄰存儲單元中的數(shù)據(jù)。
????攻擊方式:攻擊者通過溢出緩沖區(qū)將惡意代碼注入內存,使進程運行時跳轉并執(zhí)行惡意代碼來進行攻擊。
????緩沖區(qū)溢出攻擊主要分為棧溢出、堆溢出、格式化字符串溢出和整型變量溢出等,其中以棧溢出最為常見。
????1)代碼的目的
????為了讓Linux內核更加安全,為了讓緩沖區(qū)溢出攻擊變得困難,Linux內核對內存映射區(qū)域、棧和堆添加了可以選擇起始地址隨機屬性的開關。
????2)代碼區(qū)域隨機屬性起作用的條件
???
????① 首先要看進程描述符成員personality是否設置了ADDR_NO_RANDOMIZE。
????② 全局變量randomize_va_space所賦的值是多少。
2 實際代碼
????1)代碼的位置
??? mm/memory.c文件中100行左右。
????2)全局變量可能的賦值
????
????①?randomize_va_space = 0。
????關閉虛擬地址空間隨機化,即對上面的區(qū)域起始地址不進行隨機化處理。
????②?randomize_va_space?= 1。
????使內存映射區(qū)和棧的起始地址隨機化(兩個區(qū)域的隨機化處理)。
????③?randomize_va_space?= 2。
????使內存映射區(qū)域、棧和堆的起始地址都進行隨機化處理(三種區(qū)域全部隨機化處理)。
????3)實際代碼
/*
?*?Randomize?the?address?space?(stacks(棧),?mmaps(內存映射區(qū)),?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段中。
????定義到這個段的數(shù)據(jù),再linux內核被加載時,數(shù)據(jù)會自動被存放到cache中,以提高整個系統(tǒng)的執(zhí)行效率。
????需要注意的是平臺沒有cache,或者有cache,但是并沒有提供存放數(shù)據(jù)的接口就不能用__read_mostly指定數(shù)據(jù)自動放到cache了。
? ? 今天就到這吧,希望對小伙伴有所幫助哈,喜歡的話歡迎轉發(fā)、點贊、分享、在看、轉載哈,
。
免責聲明:本文內容源于網絡、技術手冊或相關書籍,版權歸原作者所有。如涉及侵權問題,請與我聯(lián)系刪除。
推薦一款Linux下好用的截圖工具shutter——shutter的安裝、配置與使用
