成人AV在线无码|婷婷五月激情色,|伊人加勒比二三四区|国产一区激情都市|亚洲AV无码电影|日av韩av无码|天堂在线亚洲Av|无码一区二区影院|成人无码毛片AV|超碰在线看中文字幕

shellcode加載器 elf可執(zhí)行文件如何動(dòng)態(tài)加載一個(gè)so?

elf可執(zhí)行文件如何動(dòng)態(tài)加載一個(gè)so?有三種方法:1。在elf的末尾插入外殼代碼,然后修改elf文件的最后一個(gè)pt,通過增加段頭來加載段的長度。將DT_uinitsection或DT_initarra

elf可執(zhí)行文件如何動(dòng)態(tài)加載一個(gè)so?

有三種方法:1。在elf的末尾插入外殼代碼,然后修改elf文件的最后一個(gè)pt,通過增加段頭來加載段的長度。將DT_uinitsection或DT_initarray的指針指向您的外殼代碼,這也是一般增強(qiáng)技術(shù)的方法。2將此ELF文件a打包到另一個(gè)ELF文件B中。在完成B中的操作后,加載a。如果不想將a釋放到文件系統(tǒng)中,則必須自己實(shí)現(xiàn)鏈接器。納加的增援也做了同樣的事。三。修改ELF文件中的動(dòng)態(tài)部分并添加一個(gè)新的DT類型的部分。所需的節(jié)點(diǎn)還應(yīng)在strsz部分中寫入要加載到DT的so的名稱,因?yàn)镋LF文件中的所有地址都是死的,所以可能沒有空位置供您插入新節(jié)點(diǎn)。您可能需要?jiǎng)h除現(xiàn)有節(jié)點(diǎn)才能插入新節(jié)點(diǎn)。如果您熟悉llvm,那么可以使用llvm將ELF文件轉(zhuǎn)換為與地址無關(guān)的LIR語言,然后對(duì)其進(jìn)行修改。

c語言程序經(jīng)過編譯后,每條指令都有一個(gè)內(nèi)存地址,那兩個(gè)程序如果有相同內(nèi)存地址的指令怎么辦?

將程序的代碼、數(shù)據(jù)和堆棧作為一塊完整的磚塊。編譯器是一個(gè)制磚機(jī),它安排了這個(gè)磚的內(nèi)部結(jié)構(gòu)。

劃線系統(tǒng)只是一塊磚,不會(huì)有互相覆蓋的矛盾。

如果您運(yùn)行多任務(wù)處理,則會(huì)有更多的磚塊。但在這個(gè)時(shí)候,操作系統(tǒng)通常是用來管理磚塊的。堆放磚塊時(shí),每一塊磚塊都會(huì)給出不同的起始坐標(biāo),以確保兩塊磚塊不占一個(gè)空間。

早期的DOS操作系統(tǒng)規(guī)定每個(gè)程序塊的高度不應(yīng)超過1米。編譯器制作的每個(gè)程序塊都使用偏移地址0000H ffffh來區(qū)分單元,但是當(dāng)操作系統(tǒng)將程序塊移動(dòng)到物理內(nèi)存時(shí),它會(huì)給每個(gè)程序塊一個(gè)不同的段起始地址,偏移地址是物理地址。所以沒有重疊。

當(dāng)然,還有編譯器。除了構(gòu)建磚塊外,編譯器還將生成一個(gè)規(guī)范標(biāo)簽,告知操作系統(tǒng)磚塊的厚度,這樣操作系統(tǒng)就可以在不浪費(fèi)空間的情況下很好地堆疊磚塊。不同的操作系統(tǒng)有不同的標(biāo)簽格式,所以windows程序不能直接在Linux下運(yùn)行。

后來,MMU出現(xiàn)在處理器、內(nèi)存管理單元中,程序地址空間和物理地址空間之間的轉(zhuǎn)換變得更加復(fù)雜。但是,確保不同的程序不覆蓋自己的空間是一項(xiàng)基本要求。

程序可能會(huì)覆蓋其他程序空間,這可能是惡意代碼造成的。CPU的安全特性越來越強(qiáng),這是很少見的。