日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux读取内存文件,linux – 使用模块读取内核内存

發布時間:2024/7/5 linux 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux读取内存文件,linux – 使用模块读取内核内存 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

首先讓我先說讀任意內核內存是一件棘手的事!并且有很多方法可以做到這一點,它們的復雜程度和靈活性各不相同.

1)硬編碼地址.

在內核版本的System.map文件中搜索它:

# grep sys_call_table /boot/System.map-2.6.18-238.12.1.el5

c06254e0 R sys_call_table

有了這個,硬編碼地址:

unsigned long *syscall_table = (unsigned long *)0xc06254e0;

然后,假設您#include< linux / syscalls.h>,您可以使用__NR_syscall定義來獲取代碼中這些系統調用的地址:

syscall_table[__NR_close]

這是最簡單的方法,但到目前為止靈活性最低.該模塊僅適用于該確切的內核.如果你將它發送到另一個內核,你就有可能得到一個內核OOP.

2)對表格進行強力掃描

看看這個:

他使用一種方法來強制內核內存地址范圍來查找sys_call_stable.原樣,它只適用于32位(64位具有不同的內核內存地址范圍).

這種方法有點靈活,但隨著內核語義的改變可能會破壞道路.

3)動態搜索System.map加載時間

加載模塊時,可以讀取內核的System.map文件.我在我寫的tpe-lkm模塊中演示了這一點.該項目托管在github上.

看看這個文件中的find_symbol_address_from_file():

非常靈活,因為你可以找到你想要的任何符號,但是從內核空間讀取文件是一個很大的“不可以”.不要問我為什么,但人們總是告訴我.您還冒著它看到的System.map無效的風險,并可能導致內核OOP.此外,代碼是……凌亂.

4)使用kallsyms_on_each_symbol()

從內核版本2.6.30開始,內核導出kallsyms_on_each_symbol().我們可以感謝ksplice人員.有了這個,你找不到sys_call_table(由于某些原因它不在那里),但你可以找到大多數其他符號.

非常靈活,非常穩定的查找符號地址的方法,但理解起來有些復雜;)

我在tpe-lkm項目中證明了這一點.看看這個文件中的find_symbol_callback()和find_symbol_address()函數:

總結

以上是生活随笔為你收集整理的linux读取内存文件,linux – 使用模块读取内核内存的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。