两个人的电影免费视频_国产精品久久久久久久久成人_97视频在线观看播放_久久这里只有精品777_亚洲熟女少妇二三区_4438x8成人网亚洲av_内谢国产内射夫妻免费视频_人妻精品久久久久中国字幕

一種突破內(nèi)核模塊版本控制解決方法

文檔序號(hào):6550635閱讀:253來源:國知局
一種突破內(nèi)核模塊版本控制解決方法
【專利摘要】本發(fā)明提供一種突破內(nèi)核模塊版本控制解決方法,根據(jù)要加載內(nèi)核模塊的環(huán)境修改elf內(nèi)核模塊的header信息,其具體實(shí)現(xiàn)過程為:首先打開elf文件,通過mmap將其映射到內(nèi)存中,通過索引index搜索segment結(jié)構(gòu)中的函數(shù)符號(hào)表,查找“__versions”的字段,該字段包括所有引用函數(shù)的符號(hào)表的值,并通過修改為當(dāng)前內(nèi)核symvers中的值,來使模塊合法化。該一種突破內(nèi)核模塊版本控制解決方法和現(xiàn)有技術(shù)相比,支持多個(gè)版本,跳出內(nèi)核檢測帶來的局限性,突破其限制,實(shí)用性強(qiáng),適用范圍廣泛,易于推廣。
【專利說明】一種突破內(nèi)核模塊版本控制解決方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及計(jì)算機(jī)【技術(shù)領(lǐng)域】,具體的說是一種突破內(nèi)核模塊版本控制解決方法?!颈尘凹夹g(shù)】
[0002]隨著Linux的蓬勃發(fā)展和普及,深入開發(fā)內(nèi)核技術(shù)人員越來越多,使Linux內(nèi)核技術(shù)發(fā)展很快,升級很快,Linux內(nèi)核版本很多,2個(gè)小內(nèi)核版本中內(nèi)核函數(shù)的定義可能都不一樣,為了確保不一致的驅(qū)動(dòng)程序?qū)е耴ernel oops,開發(fā)者加入了模塊驗(yàn)證機(jī)制。它在加載內(nèi)核模塊的時(shí)候?qū)δK進(jìn)行校驗(yàn),如果模塊與主機(jī)的一些環(huán)境不一致,就會(huì)加載不成功,這就極大局限了驅(qū)動(dòng)模塊的通用性,而且每一次內(nèi)核版本不一致都要從新編譯,這是一個(gè)非?,嵥榈氖虑?,這樣反而帶來了系統(tǒng)功能升級的局限性。
[0003]面對Linux未來美好的前景,很多公司加入了開發(fā)Linux的項(xiàng)目或產(chǎn)品,面對于商業(yè)公司,他們都有以二進(jìn)制方式出售產(chǎn)品,但是客戶的環(huán)境千變?nèi)f化。例如=Linux 2.6.32kernel內(nèi)核版本,就有幾個(gè)升級版本,如果我們想把模塊添加到所有的2.6.32版本上,我們必須要在所有版本上進(jìn)行編譯,這樣才能添加成功,因?yàn)樾r?yàn)的初衷就是某些數(shù)據(jù)結(jié)構(gòu)和某些函數(shù)發(fā)生變化,而進(jìn)行的校驗(yàn)的,但是我們開發(fā)的模塊不依賴或者所依賴的數(shù)據(jù)結(jié)構(gòu)和函數(shù)都是確定的,沒有發(fā)生變化,我們就應(yīng)該去掉繁瑣的編譯,這樣達(dá)到一次編譯,支持多個(gè)版本,我們就應(yīng)該跳出內(nèi)核檢測帶來的局限性,突破這樣的限制,使我們的驅(qū)動(dòng)和應(yīng)用層一樣,具有更好的平臺(tái)支持性,打破因?yàn)榭蛻舡h(huán)境小小的差異帶來的產(chǎn)品局限性?;诖耍F(xiàn)提供一種突破內(nèi)核模塊版本控制解決方法。

【發(fā)明內(nèi)容】

[0004]本發(fā)明的技術(shù)任務(wù)是解決現(xiàn)有技術(shù)的不足,提供一種實(shí)用性強(qiáng)、突破內(nèi)核模塊版本控制解決方法。
[0005]本發(fā)明的技術(shù)方案是按以下方式實(shí)現(xiàn)的,該一種突破內(nèi)核模塊版本控制解決方法,根據(jù)要加載內(nèi)核模塊的環(huán)境修改elf內(nèi)核模塊的header信息,其具體實(shí)現(xiàn)過程為:
首先打開elf文件,通過_ap將其映射到內(nèi)存中,通過索引index搜索segment結(jié)構(gòu)中的函數(shù)符號(hào)表,查找“—versions”的字段,該字段包括所有引用函數(shù)的符號(hào)表的值,并通過修改為當(dāng)前內(nèi)核symvers中的值,來使模塊合法化。
[0006]所述解決過程的詳細(xì)步驟為:
一、獲取當(dāng)前系統(tǒng)對應(yīng)運(yùn)行的symvers文件,打開symvers文件;
二、打開當(dāng)前驅(qū)動(dòng)elf文件,mmap映射到內(nèi)存中;
三、校驗(yàn)文件的合法性;
四、查找內(nèi)核模塊頭header中的—versions的地址;
五、將所有引用函數(shù)的crc的值通過查找symvers進(jìn)行更新;
六、替換完成,保存文件,關(guān)閉操作;
七、insmod加載模塊。[0007]所述步驟三中校驗(yàn)文件的合法性的步驟為:
檢測驅(qū)動(dòng)elf文件格式,是否是驅(qū)動(dòng)文件;
檢測驅(qū)動(dòng)elf文件,是64bit還是32bit。
[0008]本發(fā)明與現(xiàn)有技術(shù)相比所產(chǎn)生的有益效果是:
本發(fā)明的一種突破內(nèi)核模塊版本控制解決方法不用從新編譯內(nèi)核模塊來達(dá)到內(nèi)核模塊的成功,實(shí)現(xiàn)一次編譯,保證系統(tǒng)穩(wěn)定;通過symvers動(dòng)態(tài)更新模塊的“—versions”的字段的函數(shù)值,來突破內(nèi)核加載時(shí)的檢測;支持多個(gè)版本,跳出內(nèi)核檢測帶來的局限性,突破其限制,實(shí)用性強(qiáng),適用范圍廣泛,易于推廣。
【專利附圖】

【附圖說明】
[0009]附圖1是本發(fā)明的實(shí)現(xiàn)示意圖。
【具體實(shí)施方式】
[0010]下面結(jié)合附圖對本發(fā)明的一種突破內(nèi)核模塊版本控制解決方法作以下詳細(xì)說明。
[0011]本發(fā)明的目的在于提供突破內(nèi)核模塊版本控制解決方法,根據(jù)新內(nèi)核中的函數(shù)信息更新內(nèi)核模塊中elf的header的函數(shù)符號(hào)表值來實(shí)現(xiàn)。基于此,如附圖1所示,現(xiàn)提供一種突破內(nèi)核模塊版本控制解決方法,根據(jù)要加載內(nèi)核模塊的環(huán)境修改eIf內(nèi)核模塊的header信息,即獲取 當(dāng)前運(yùn)行的系統(tǒng)符號(hào)表;將驅(qū)動(dòng)elf文件打開,更新為新的符號(hào)文件。
[0012]在開發(fā)的模塊不依賴或者所依賴的數(shù)據(jù)結(jié)構(gòu)和函數(shù)都是確定的,沒有發(fā)生變化前提下,我們就應(yīng)該去掉繁瑣的編譯,這樣達(dá)到一次編譯,支持多個(gè)版本,我們就應(yīng)該跳出內(nèi)核檢測帶來的局限性,突破這樣的限制?;诖?,本方法的具體實(shí)現(xiàn)過程為:
首先打開elf文件,通過_ap將其映射到內(nèi)存中,通過索引index搜索segment結(jié)構(gòu)中的函數(shù)符號(hào)表,查找“—versions”的字段,該字段包括所有引用函數(shù)的符號(hào)表的值,并通過修改為當(dāng)前內(nèi)核symvers中的值,來使模塊合法化。
[0013]所述解決過程的詳細(xì)步驟為:
I)獲取當(dāng)前運(yùn)行的 symvers,如:/boot/symvers_2.6.18-92.el5PAE。
[0014]2)將驅(qū)動(dòng)elf文件打開,mmap映射到內(nèi)存中。
[0015]3)檢測驅(qū)動(dòng)elf文件格式,是否是驅(qū)動(dòng)文件。
[0016]4)檢測驅(qū)動(dòng)elf文件,是64bit還是32bit。
[0017]5)查找內(nèi)核模塊頭header中的—versions的地址。
[0018]6)將所有引用函數(shù)的crc的值通過查找symvers進(jìn)行更新。
[0019]7)替換完成,保存文件,關(guān)閉操作。
[0020]8) insmod 加載模塊。
[0021]實(shí)施例:
在實(shí)際應(yīng)用中,模塊版本結(jié)構(gòu)如下所示: struct modversion_info {
unsigned long crc;
char name [MODULE—NAME—LEN];
【權(quán)利要求】
1.一種突破內(nèi)核模塊版本控制解決方法,其特征在于根據(jù)要加載內(nèi)核模塊的環(huán)境修改elf內(nèi)核模塊的header信息,其具體實(shí)現(xiàn)過程為: 首先打開elf文件,通過_ap將其映射到內(nèi)存中,通過索引index搜索segment結(jié)構(gòu)中的函數(shù)符號(hào)表,查找“—versions”的字段,該字段包括所有引用函數(shù)的符號(hào)表的值,并通過修改為當(dāng)前內(nèi)核symvers中的值,來使模塊合法化。
2.根據(jù)權(quán)利要求1所述的一種突破內(nèi)核模塊版本控制解決方法,其特征在于:所述解決過程的詳細(xì)步驟為: 一、獲取當(dāng)前系統(tǒng)對應(yīng)運(yùn)行的symvers文件,打開symvers文件; 二、打開當(dāng)前驅(qū)動(dòng)elf文件,mmap映射到內(nèi)存中; 三、校驗(yàn)文件的合法性; 四、查找內(nèi)核模塊頭header中的—versions的地址; 五、將所有引用函數(shù)的crc的值通過查找symvers進(jìn)行更新; 六、替換完成,保存文件,關(guān)閉操作; 七、insmod加載模塊。
3.根據(jù)權(quán)利要求2所述的一種突破內(nèi)核模塊版本控制解決方法,其特征在于:所述步驟三中校驗(yàn)文件的合法性的步驟為: 檢測驅(qū)動(dòng)elf文件格式,是否是驅(qū)動(dòng)文件; 檢測驅(qū)動(dòng)elf文件,是64bit還是32bit。
【文檔編號(hào)】G06F9/445GK104021023SQ201410284719
【公開日】2014年9月3日 申請日期:2014年6月24日 優(yōu)先權(quán)日:2014年6月24日
【發(fā)明者】黃玉龍 申請人:浪潮電子信息產(chǎn)業(yè)股份有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會(huì)獲得點(diǎn)贊!
1
涪陵区| 开鲁县| 宿州市| 克拉玛依市| 洞口县| 彭阳县| 互助| 保康县| 巴林左旗| 怀柔区| 兴仁县| 澎湖县| 佛冈县| 富平县| 陆良县| 安龙县| 遂平县| 财经| 海阳市| 鄂温| 望谟县| 嵊泗县| 揭西县| 肇东市| 宝兴县| 安福县| 岢岚县| 枣庄市| 黑河市| 宁明县| 绿春县| 株洲县| 丹巴县| 双柏县| 武乡县| 鞍山市| 桐庐县| 顺昌县| 宜州市| 寿阳县| 五峰|