999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

專用網卡動態庫熱補丁技術研究

2020-06-15 06:06:30王維晟
數字通信世界 2020年5期
關鍵詞:符號

王維晟

(國家計算機網絡應急技術處理協調中心,北京 100029)

0 引言

專用網卡往往插在一臺服務器上,它在硬件上接收前端數據分發設備的數據,根據負載均衡原理可以將數據發送到后臺服務器的多個線程,使服務器的每個線程都能對數據同時進行處理,同時通過專用網卡的軟件系統可以提供數據包的預處理功能。專用網卡在網絡拓撲中的位置如圖1所示。

圖1 專用網卡在網絡拓撲中的位置

研究發現,熱補丁可以保證當前業務不中斷的前提下,對軟件故障進行調試和修復。針對熱補丁的研究,主要是基于VXWORKS 操作系統下的熱補丁,而專用網卡運行硬件環境是Intel 64位處理器,軟件是基于Linux 操作系統(Centos 7.2),并按功能封裝成不同動態庫。文中介紹了熱補丁的相關技術,并詳細論述了動態庫熱補丁的實現方案,最后通過一個工程案例表明,專用網卡中使用動態庫熱補丁,能大大提高軟件故障修復的效率。

1 動態庫熱補丁的研究與實現

改變動態庫中某個函數的控制流程,可以使用LD_PRELOAD 提前加載動態庫;可以修改PLT/GOT 表;可以仿DPDK 構造constructor 屬性。本文采用最直接的JMP 跳轉指令來實現改變控制流。

動態庫熱補丁的核心原理如圖2所示,先給當前進程打上動態庫libpatch.so 這一補丁文件,其中libpatch.so 文件實現了fun1函數,假設main 函數中調用fun0函數,fun0函數定義在動態庫libtest0.so 中,我們通過改變fun0函數代碼入口處的匯編指令,使其通過JMP 跳轉指令,直接跳轉到補丁文件中的fun1處執行。

圖2 動態庫熱補丁核心原理

在真實的補丁文件libpatch.so 中,我們實現的是fun1函數,然后通過給進程打補丁,用補丁文件中的fun1 代替進程中的fun1。我們把當前進程稱為遠端環境,把打補丁的進程稱為本端環境。動態庫熱補丁技術中涉及如下幾個關鍵技術:獲取遠端環境上的函數的地址;執行遠端環境上的的函數;本端補丁文件中符號的重定向。

1.1 動態庫熱補丁關鍵技術

1.1.1 獲取遠端環境上的函數的地址

前文提到,可以通過PTRACE 系統調用對進程進程跟蹤,另外程序還可以通過dlopen 函數憑空加載一個動態庫,并通過dlsym獲取符號地址。令人遺憾的是,dlopen函數定義在libdl.so中,而專用網卡軟件Linux 環境甚至都沒有libdl.so 這一動態庫的存在。不過值得慶幸的是,幾乎每一個進程都會使用libc.so 這一動態庫,該動態庫中有一套__libc 打頭的dlopen 函數。

每一個動態庫中符號,在文件的重定向信息中都存在一個符號地址偏移,當加載到內存,會給每個動態庫分配一個基地址,可以通過cat/proc/pid/maps 命令查詢,所以動態庫中符號地址就等于動態庫基地址加上重定向信息中符號地址偏移。根據這一原理,可以計算出__libc_dlopen_mode 函數在遠端環境下的地址,如圖3所示。

圖3 遠端函數地址計算原理

1.1.2 執行遠端環境上的函數

要想執行遠端環境上的函數,僅僅知道遠端函數的地址是不夠的,還需要構造遠端函數參數,以及把函數參數傳遞給遠端。

在遠端環境打開補丁文件時,需要將補丁文件路徑作為參數傳遞給__libc_dlopen_mode 函數,但是因為字符串是保存在.rodata節中的,而遠端環境肯定沒有補丁文件路徑這一字符串,所以無法進行字符串重定位。這時需要在遠端調用mmap 申請一塊遠端內存,將函數參數字符拷貝到這塊遠端內存中。同理,解決補丁文件中包含的所有字符串重定向問題時,都需要進行先mmap 后拷貝操作。

在Intel 64位處理下,當函數的參數小于六個時,函數參數使用寄存器保存,參數從左到右依次使用edi,esi,edx,ecx,r8d 和r9d 寄存器,當函數的參數大于六個時,多出的參數使用棧保存。根據Intel 64位處理器棧是從高地址往低地址生長的,在執行遠端函數時,需要取遠端進程棧的最小地址開始的一片棧空間,供補丁函數內的局部變量以及補丁函數參數大于六個時使用。

1.1.3 本端補丁文件中符號的重定向

補丁文件中的函數,不可避免可能會調用遠端進程中的函數或者全局變量,這兩種類型的未定義符號需要完成重定向操作,根據PLT 表和GOT 表相關原理,需要修改補丁文件未定義符號在GOT 表中存放符號地址。如果補丁文件中未定義符號屬于函數,且該函數在遠端環境的靜態庫中實現,那么需要向GOT 表該符號地址中寫入靜態庫函數地址;如果補丁文件中未定義符號屬于函數,且函數在遠端環境動態態庫中實現,那么需要向GOT 表該符號地址中寫入動態庫基地址加上該符號在動態庫的偏移;如果補丁文件中未定義符號屬于全局變量,且該變量在遠端環境動態庫中定義,鑒于dlopen 可以自動修復這些符號的重定向問題,無需手動重定向;如果補丁文件中未定義符號屬于全局變量,且該變量在遠端環境靜態庫中實現,因為dlopen 對靜態全局變量無法延后重定向,所以軟件中建議使用GET 或SET 函數對全局變量取值或賦值。

1.2 動態庫熱補丁的實現

結合對PTRACE 相關原理和動態庫熱補丁關鍵技術的研究,動態庫熱補丁軟件流程圖如圖4所示。首先解析補丁文件,根據ELF 文件格式特點,提取補丁文件中需要打補丁的函數名,以及需要解決重定向問題的未定義符號,然后通過PTRACE 機制,對補丁文件中未定義符號進行重定向修復,最后需要對遠端進程中與補丁函數同名函數實施JMP 指令跳轉。

圖4 動態庫熱補丁軟件流程圖

針對補丁文件ELF 解析部分做細致分析,其流程圖如圖5所示。首先需要解析出補丁文件中.rela.plt 節、.dynstr 節、.dynsym節、.symtab 節和.strtab 節相關信息,然后在這些節中提取到補丁函數和未定義符號,最后需要訪問遠端進程,遍歷程序頭PHDR,提取補丁文件中函數和未定義符號對應的地址,便于后續做重定向和函數跳轉。

圖5 補丁文件ELF解析

2 典型案例

某公司專用網卡設備運行進程包含動態庫libtest.so,該動態庫中有一個發包接口中inac_alloc_pkt 函數沒對入參做合法性檢測,導致系統發包時會出現異常。

采用熱補丁方式對故障進行修復,首先編寫patch.c 文件,重寫inac_alloc_pkt 接口,新增對參數合法性檢測。根據本文的理論,我們編寫代碼制作了自己的二進制補丁工具do_patch,該工具使用方法是“do_patch[待打補丁的進程pid 號]”。接著我們把libpatch.so 和do_patch 文件拷貝到專用網卡所在的Linux 環境的app 目錄下,利用ps 命令查看當當前環境網口發包進程pid 為13456,然后執行補丁命令,最終可以看到在沒有更換版本的前提下,遠端環境上故障得到修復,提高了故障修復的效率。

3 結束語

本文對動態庫熱補丁相關的關鍵技術和實現做了詳細的闡述,并結合實際工程案例論證了該方案的可行性。熱補丁技術不但給故障修復提供了一種手段,而且可以大大減少軟件開發成本。基于本文Intel 64位處理和Linux 操作系統的動態庫熱補丁方案,對于其他平臺的熱補丁研究也有一定的參考價值。

猜你喜歡
符號
幸運符號
符號神通廣大
學符號,比多少
幼兒園(2021年6期)2021-07-28 07:42:14
“+”“-”符號的由來
靈魂的符號
散文詩(2017年17期)2018-01-31 02:34:20
怎樣填運算符號
變符號
倍圖的全符號點控制數
圖的有效符號邊控制數
草繩和奇怪的符號
主站蜘蛛池模板: 99精品热视频这里只有精品7| 99久视频| 91九色国产porny| 国产欧美亚洲精品第3页在线| 欧美另类精品一区二区三区| 丁香五月激情图片| 国产玖玖视频| 亚亚洲乱码一二三四区| 伊人大杳蕉中文无码| 精品撒尿视频一区二区三区| 国产欧美日韩18| 亚洲av成人无码网站在线观看| 国产白浆视频| 青草午夜精品视频在线观看| 国产欧美中文字幕| 日韩免费毛片视频| 欧美a级完整在线观看| 亚洲午夜综合网| 国产成人综合网在线观看| 一本大道香蕉中文日本不卡高清二区 | 中文成人在线| 国产18在线播放| 亚洲第一精品福利| 亚洲AV无码久久精品色欲| 中文字幕在线播放不卡| 婷婷午夜影院| 国产无套粉嫩白浆| 亚洲欧美另类中文字幕| 欧洲熟妇精品视频| 亚洲精选高清无码| 丁香五月激情图片| 国产91在线|日本| 国产中文一区a级毛片视频| 国产网站黄| 久久99精品国产麻豆宅宅| 丝袜久久剧情精品国产| 日韩国产一区二区三区无码| 亚洲国产成人精品青青草原| 高清无码手机在线观看| 国产精品亚欧美一区二区三区 | 蜜臀av性久久久久蜜臀aⅴ麻豆 | 中国毛片网| 免费亚洲成人| 欧美日本不卡| 99久久免费精品特色大片| 成年人国产视频| 午夜日本永久乱码免费播放片| 精品福利网| 伊人久久久大香线蕉综合直播| 四虎永久免费地址| 亚洲AV成人一区二区三区AV| 亚洲精品自产拍在线观看APP| 日本亚洲成高清一区二区三区| 久青草网站| 在线视频97| 亚洲成人精品| 久久夜夜视频| 久久综合色视频| 麻豆国产精品一二三在线观看| 成人免费网站在线观看| 一级爱做片免费观看久久| 91成人精品视频| 欧洲成人免费视频| 婷婷丁香色| 国产精品美女免费视频大全| 免费jjzz在在线播放国产| 又大又硬又爽免费视频| 99re免费视频| 丁香婷婷久久| 色婷婷色丁香| 亚洲日本一本dvd高清| 亚洲日本www| 又污又黄又无遮挡网站| 性视频一区| 91在线视频福利| 国产精品天干天干在线观看| 91亚洲精选| 成人字幕网视频在线观看| 国产美女在线免费观看| 国产成人精品亚洲77美色| 伊人成色综合网| 亚洲成a人片|