新聞中心
ELF文件分析

創(chuàng)新互聯(lián)公司擁有網(wǎng)站維護(hù)技術(shù)和項(xiàng)目管理團(tuán)隊(duì),建立的售前、實(shí)施和售后服務(wù)體系,為客戶提供定制化的成都網(wǎng)站制作、網(wǎng)站建設(shè)、網(wǎng)站維護(hù)、四川聯(lián)通機(jī)房服務(wù)器托管解決方案。為客戶網(wǎng)站安全和日常運(yùn)維提供整體管家式外包優(yōu)質(zhì)服務(wù)。我們的網(wǎng)站維護(hù)服務(wù)覆蓋集團(tuán)企業(yè)、上市公司、外企網(wǎng)站、成都商城網(wǎng)站開發(fā)、政府網(wǎng)站等各類型客戶群體,為全球上千家企業(yè)提供全方位網(wǎng)站維護(hù)、服務(wù)器維護(hù)解決方案。
elf文件已經(jīng)發(fā)展出來許多年,它幾乎支持現(xiàn)在所有操作系統(tǒng),而linux,現(xiàn)在一個(gè)比較流行的操作系統(tǒng),也采用了elf文件來作為可執(zhí)行文件的格式。在Linux下,動(dòng)態(tài)鏈接器rtld是操作系統(tǒng)的一部分,主要的功能就是讀取elf文件并將其轉(zhuǎn)換成可執(zhí)行的狀態(tài)。
動(dòng)態(tài)鏈接器rtld是一個(gè)用C語言編寫的、在系統(tǒng)啟動(dòng)時(shí)加載的程模塊,位于系統(tǒng)中/usr/bin/ld-linux.so.2等下。它的主要功能就是從elf文件提取和裝入可執(zhí)行文件,并且在運(yùn)行時(shí)管理共享庫(kù)的裝載、庫(kù)函數(shù)的調(diào)用和elf文件的重定位等。
實(shí)現(xiàn)elf文件的轉(zhuǎn)換,動(dòng)態(tài)鏈接器rtld會(huì)先對(duì)elf文件進(jìn)行分析,提取elf文件的頭部以及其他的必要的節(jié)表。根據(jù)程序的需要,它還會(huì)讀取使用的共享庫(kù)的信息,導(dǎo)入符號(hào)表,重定位表,hash表等信息。
接著,動(dòng)態(tài)鏈接器rtld會(huì)將提取出來的信息裝入內(nèi)存空間,同時(shí)將符號(hào)表中的符號(hào)信息和重定位表中的信息關(guān)聯(lián)在一起,并進(jìn)行重定位。最后,將裝入內(nèi)存空間的elf文件轉(zhuǎn)換成可執(zhí)行的文件,存儲(chǔ)到文件系統(tǒng)中,以供程序程序讀取和執(zhí)行。
下面是Linux下如何使用動(dòng)態(tài)鏈接器rtld解析elf文件的簡(jiǎn)單代碼:
“`code
#include
#include
int main(int argc,char *argv[])
{
void *handle;
char *error;
handle = dlopen(“/usr/bin/[elf file]”, RTLD_LAZY);
if(!handle) {
fprintf(stderr, “%s\n”, dlerror());
exit(EXIT_FAILURE);
}
dlerror();
if((error = dlerror() != NULL)) {
fprintf(stderr, “%s\n”, error);
exit(EXIT_FAILURE);
}
dlclose(handle);
exit(EXIT_SUCCESS);
}
這里的代碼中,dlopen()函數(shù)用于從指定的鏈接文件提取信息,而 dlclose() 則用于將 elf 文件裝入內(nèi)存空間中并關(guān)閉。
從上面的分析可以看出,動(dòng)態(tài)鏈接器rtld在Linux系統(tǒng)中非常重要,它主要的功能就是從elf文件中提取信息并將其轉(zhuǎn)換成可執(zhí)行的狀態(tài)。所以,如果是Linux上的開發(fā)者,可以通過對(duì)動(dòng)態(tài)鏈接器rtld的分析和利用,來更好的掌握elf文件的解析技術(shù)和知識(shí),從而讓自己的編程質(zhì)量得到進(jìn)一步的提高。
香港服務(wù)器選創(chuàng)新互聯(lián),香港虛擬主機(jī)被稱為香港虛擬空間/香港網(wǎng)站空間,或者簡(jiǎn)稱香港主機(jī)/香港空間。香港虛擬主機(jī)特點(diǎn)是免備案空間開通就用, 創(chuàng)新互聯(lián)香港主機(jī)精選cn2+bgp線路訪問快、穩(wěn)定!
標(biāo)題名稱:Linux下的動(dòng)態(tài)鏈接器rtld解析(linuxrtld)
URL網(wǎng)址:http://m.fisionsoft.com.cn/article/cddoosj.html


咨詢
建站咨詢
