最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

緩沖區(qū)溢出解密一

互聯(lián)網(wǎng)   發(fā)布時(shí)間:2008-10-08 19:04:09   作者:佚名   我要評(píng)論
緩沖溢出弱點(diǎn)誕生于70年代。Morris Worm(80年代)可以認(rèn)為是它們的第一次公開應(yīng)用。從90年代開始,相關(guān)的文檔,如著名的Aleph1的”Smashing the Stack for Fun and Profit”和代碼已經(jīng)在互聯(lián)網(wǎng)上公開。 這篇文章是關(guān)于某種需要非常重視的主題的系列文

好了,我們說將被放到EIP中的值是CPU自身計(jì)算出來的。如果我們JMP到一個(gè)函數(shù)又是什么樣子的呢?函數(shù)中指令的地址將在內(nèi)存中的其它地方。它們執(zhí)行后,CPU是如何知道到哪里繼續(xù)調(diào)用程序執(zhí)行呢?為了這個(gè)目的,在我們JMP到函數(shù)前,我們?cè)谝粋€(gè)臨時(shí)寄存器中保存下一個(gè)指令地址,比如說在EDX中;并且在從函數(shù)返回之前,我們又把EDX中的地址寫回EIP。如果我們使用JMP來跳轉(zhuǎn)到函數(shù)地址,那將可能實(shí)際上是一個(gè)非常煩人的工作。
然而,ix86處理器家族給我們提供了兩個(gè)指令:CALL和RET,使我們的生活簡(jiǎn)單!CALL指令把”函數(shù)返回后下個(gè)要被執(zhí)行的指令”寫入堆棧。它PUSH地址到堆棧,并且把函數(shù)地址寫入EIP。因而,一個(gè)函數(shù)調(diào)用就產(chǎn)生了。另一方面,RET指令從堆棧中POP出”返回地址”,并且把地址寫入EIP。因而,我們將從函數(shù)安全地返回,而且繼續(xù)了程序的下一步執(zhí)行。
讓我們看看下面的代碼片段:
x = 0;
function(1, 2, 3);
x = 1;
在幾個(gè)匯編指令運(yùn)行(x=0)之后,我們需要到function()所在的內(nèi)存位置。就如我前面所說的,為了實(shí)現(xiàn)這一目標(biāo),首先我們拷貝返回地址的地址(在這個(gè)例子里是x=1的指令地址。)到一些臨時(shí)空間(可能是一個(gè)寄存器)用JMP跳轉(zhuǎn)到函數(shù)的地址空間,而且,在函數(shù)結(jié)束時(shí)我們恢復(fù)我們將要拷貝到EIP的返回地址。
感謝上帝,所有這些麻煩的操作都由CPU自身通過CALL和RET為我們做了,而你能從上面的篇章中得到相關(guān)細(xì)節(jié)。 一般地,程序堆棧區(qū)域能夠象這樣表示:
|_parameter_I____| ESP 8
|_parameter II___| ESP 4
|_return address_| ESP
Figure X : Stack
ESP,EBP
如我們已經(jīng)說過的,堆棧同樣被用來存儲(chǔ)動(dòng)態(tài)變量。動(dòng)態(tài)地,程序請(qǐng)求新的空間時(shí),CPU PUSH一些數(shù)據(jù)而我們的程序釋放一些數(shù)據(jù)時(shí)它就POP一些數(shù)據(jù)。為了給內(nèi)存編址,我們使用”相對(duì)尋址”。也就是說,我們?cè)谖覀兊亩褩V薪o數(shù)據(jù)編址,與一些標(biāo)準(zhǔn)相關(guān)。而這個(gè)標(biāo)準(zhǔn)就是ESP,它是Extended Stack Pointer首字母縮寫。這個(gè)寄存器指向堆棧的頂端。考慮這個(gè):
void f()
{
int a;
}
可以看出,在f()函數(shù)中,我們?yōu)橐粋€(gè)名為a的整型變量分配空間。整型變量a的空間將在堆棧中分配。而計(jì)算機(jī)將引用它的地址作為ESP- 的一些字節(jié)。因此堆棧指針對(duì)程序執(zhí)行是非常重要的。若我們調(diào)用一個(gè)函數(shù)呢?這個(gè)調(diào)用的函數(shù)有一個(gè)堆棧,它有一些局部變量,意味著它將要利用堆棧指針寄存器。同樣地,內(nèi)部被調(diào)用的函數(shù)將有局部變量而且它也將需要堆棧指針。
為了克服這個(gè),我們保存老的堆棧指針。就象我們對(duì)返回地址所做的那樣,我們PUSH老的ESP到堆棧,并且利用另外一個(gè)名為EBP的寄存器來引用被調(diào)用函數(shù)的局部變量。

相關(guān)文章

最新評(píng)論

尚志市| 上蔡县| 都江堰市| 丰县| 东至县| 遂平县| 上虞市| 蕲春县| 上蔡县| 淳安县| 阳江市| 井研县| 宕昌县| 竹北市| 醴陵市| 南康市| 平山县| 正宁县| 靖江市| 翁牛特旗| 抚松县| 牙克石市| 泸定县| 宁国市| 房产| 天峻县| 泾阳县| 贵阳市| 博兴县| 吉林省| 久治县| 华坪县| 洛宁县| 依安县| 桑日县| 洛阳市| 南投县| 太和县| 阳春市| 隆子县| 武威市|