往linux核心掛鉤子–什麼應該什麼不應該
總是在網上看到有人討論攔截linux的系統呼叫,方法數量可謂海量,幾乎都是自己寫的核心模組,可是這種方式有什麼意義呢,模組都能載入了還有什麼做不 到的呢,要知道linux的可載入核心模組功能十分強大,再加上linux核心本身就是開放原始碼的,如果說你能載入模組了,那麼就可以說你完全控制了核心,你再搞什麼攔截系統呼叫實際上一點意義都沒有,用模組別說攔截系統呼叫了,攔截任何函式都小菜一碟,當然如果核心匯出的函式你可以直接攔截,沒有匯出 的函式有很多辦法可以找到,比如/proc/kallsyms,大不了一個一個對,肯定能找到其地址。
在網上我幾乎看到了兩種方法來攔截,對於2.4以前的核心,核心匯出了大部分的函式,這樣在模組中攔截很方便,可到了2.4核心以及2.6核心中,很多以 前匯出的函式現在不再匯出了,於是就要費一番周折了,常見的方式有搜尋核心符號表。在所有的攔截動作中,以攔截檔案操作的動作居多,我們想象一下真的需要那麼麻煩的從符號表找沒有匯出的函式地址嗎(這個操作實際上一點也不麻煩)?想想看sys_read,sys_write等操作僅僅是一個二傳手,執行緒只是經過它們一下,它們的地址不再匯出不是為了更加安全,你都通過模組進入核心了就說明沒有什麼是安全的了。linux具有的虛擬檔案系統是一個很好的機制
,這說明真正做事情的就是vfs中的回撥函式們,你直接攔截回撥函式不就結了,每個開啟的檔案在記憶體中都有一個file結構體,而此結構體中有 file_operations結構,該結構就是該檔案的回撥函式集合,現在問題是你要攔截一個回撥函式不得先開啟該檔案找到這個 file_operations結構嗎?如果有此疑問的,說明這位兄弟還是對核心不熟悉,仔細看一下核心,所有的file_operations都是以全 局的靜態方式提供,也就是說所有的一類檔案公用一個file_operations結構體,這就好辦了,隨便開啟一個檔案,將其替換了就可以了。上面說的所有的file_operations被公用可以從以下程式碼看出來:
void ext2_read_inode (struct inode * inode)
本文轉自 dog250 51CTO部落格,原文連結:http://blog.51cto.com/dog250/1273424
相關文章
- JWT能夠幹什麼,不應該幹什麼?JWT
- 什麼情況下不應該使用 Windows Linux 子系統WindowsLinux
- 為什麼你不應該辭職去做遊戲應用遊戲
- 什麼時候你不應該使用微服務微服務
- 程式設計師為什麼不應該加班程式設計師
- 對於Linux,我們應該學什麼?Linux
- 什麼場景應該用MongoDB ?MongoDB
- 應該使用什麼 CI/CD 工具?
- 程式猿小白應該注意什麼
- 應屆生面試該禁忌什麼面試
- 技術面試應該問些什麼?應聘者應該如何應對?面試
- 真正的兒童智慧手錶應該是什麼樣子
- 暢談雲原生(上):雲原生應用應該是什麼樣子?
- 應聘遊戲策劃之前,應該做些什麼?遊戲
- 為什麼開發者應該摒棄敏捷?敏捷
- 為什麼你應該學 Python ?Python
- 面試應該問公司什麼問題面試
- 為什麼程式猿都應該學點linux命令?Linux
- 為什麼應該在 Linux 上使用命名管道Linux
- oracle應該安裝在什麼版本的linux下OracleLinux
- Web前端到底需要學什麼?應該怎麼學?Web前端
- 「譯」Python 專案應該都有什麼?Python
- 非 IT 的朋友找 IT 工作,應該學什麼?
- 為什麼你應該嘗試 “全棧”全棧
- 為什麼你應該嘗試“全棧”全棧
- 獨立開發該做什麼,該不做什麼
- 為什麼不應該在 REST API 中使用布林值? - geekcultureRESTAPI
- 學習Linux應該選擇什麼學習模式呢?Linux模式
- 供應鏈攻擊是什麼?應該如何處理?
- Python 集合是什麼,為什麼應該使用以及如何使用?Python
- 準媽媽應該做什麼和不做什麼–資料資訊圖
- 中國的雲遊戲應該是什麼樣的?遊戲
- Web全棧工程師應該會什麼Web全棧工程師
- 零基礎學UI應該學什麼?UI
- 單元測試-mock使用應該注意什麼Mock
- 新手入門應該用什麼剪輯工具?
- 什麼是RockyLinux,你應該考慮嗎?Linux
- 為什麼你應該學習程式設計程式設計