成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

CPU阿甘之緩沖區溢出

開發 開發工具
最早的時候我認為程序都是順序執行的,后來發現并不是這樣,經常會出現一條跳轉指令,讓我到另外一個內存地址處去下一條指令去執行。

[[218450]]

我是大家的老朋友CPU阿甘, 每天你一開機,我就忙得不亦樂乎,從內存中讀取一條條的指令,挨個執行。

最早的時候我認為程序都是順序執行的,后來發現并不是這樣,經常會出現一條跳轉指令,讓我到另外一個內存地址處去下一條指令去執行。

時間久了我就明白這是人類代碼中的if ... else ,或者for ,while等循環導致的。

這樣跳來跳去,讓我覺得有點頭暈,不過沒有辦法,這是人類做出的規定。

后來我發現,有些指令經常會出現重復,尤其是下面這幾個:

  • pushl    %ebp
  • movl     %esp %ebp
  • call  xxxx
  • ret

正當我疑惑的時候,內存炫耀地說:這些指令是為了函數調用,建立棧幀所所必需的啊。

“函數調用?這是什么鬼?”

“函數調用你都不知道? 我告訴你吧,現在的計算機語言,甭管你是面向對象還是函數式、動態還是靜態、解釋還是編譯,只要想在我們馮諾依曼體系結構下運行,最終都得變成順序、循環、分支,以及函數調用!”

內存說著給我舉了一個例子:

這個例子非常簡單,一看就明白。

“但是棧幀是什么?”

“阿甘你知道棧是什么意思吧?”

“不就是一個先進后出的數據結構嗎?”

“對,通俗來說:一個棧幀就是這個棧中的一個元素,表示了一個函數在運行時的結構。” 內存繼續給我科普:

“你這種畫法好古怪,怎么倒過來了,棧底在上方,棧頂反而在下方!”

“這也是人類規定的,一個進程的虛擬內存中有個區域,就是棧,這個棧就是從高地址向低地址發展的啊。”

“奧,原來我執行的代碼在一個叫做代碼區的地方存放著啊,執行的時候會操作你的棧,對不對?”

“沒錯,我再給你看看那個棧幀的內部結構吧!”

這張圖看起來很復雜,但是和代碼一對應,還是比較清楚的。

我心中模擬了一下這個執行過程,hello()函數正在被執行,當要調用add函數的時候,需要準備參數,即x = 10, y=20 。

還要記錄下返回地址,即printf(....)這個指令在內存的地址。當add函數調用完成以后,就可以返回到這里執行了。

真正開始執行add函數的時候,也需要給它建立一個棧幀(其中要記錄下上個函數棧幀的開始地址),還有這個函數的參數,在棧幀也會分配內存空間,例如sum, buf等。

等到執行結束,add函數的棧幀就廢棄了(相當于從棧中彈出),找到返回地址,繼續執行printf指令。

hello函數執行完畢,也會廢棄掉,回到上一個函數的棧幀,繼續執行,如此持續下去....

我對內存說:“明白了,我已經迫不及待地想執行一下這個函數,看看效果了。”

內存說:“真的明白了?正好,操作系統老大已經發出指令,讓我們運行了,開始吧!”

建立hello函數的棧幀,調用add函數,建立add棧幀,執行add函數的代碼, 一切都很順利。

add函數中調用了scanf ,要求用戶輸入一些數據,人類是超級慢的,我耐心等待。

用戶輸入了8個字符A,我把他們都放到了buf所在的內存中:

但是人類還在輸入,接下里是一些很奇怪的數據,其長度遠遠超過了char buf[8]中的8個字節。

可是我還得把數據給放到內存中啊,于是函數棧幀就變成了這個樣子。

(注:用戶輸入的數據是從低地址向高地址存放的。)

我覺得特別古怪的是,這個返回地址也被沖掉了,被改寫了。

這個用戶到底要干啥?

add函數執行完畢,要返回到hello函數了, 我明明知道返回地址已經被改掉, 可是我沒有選擇,還得把那個新的(用戶輸入的)返回地址給取出來, 老老實實地去那個地址取出下一條指令去執行。

完了,這根本就不是原來的prinf函數,而是一段惡意代碼的入口!

分割線

與此同時....

黑客三兄弟中的老三大叫: 大哥二哥,我的這次緩沖區溢出攻擊實驗成功了!

“不錯啊,你是怎么搞的?” 老大問道。

“正如二哥說的,那個scanf函數沒有邊界檢查,我成功地把代碼注入到了棧幀中,并且修改了返回地址!于是程序就跳到我指定的地方執行了。”

【本文為51CTO專欄作者“劉欣”的原創稿件,轉載請通過作者微信公眾號coderising獲取授權】

戳這里,看該作者更多好文

責任編輯:武曉燕 來源: 51CTO專欄
相關推薦

2017-01-09 17:03:34

2019-02-27 13:58:29

漏洞緩沖區溢出系統安全

2014-07-30 11:21:46

2009-09-24 18:16:40

2010-12-27 10:21:21

2015-03-06 17:09:10

2010-10-09 14:45:48

2022-05-07 08:27:42

緩沖區溢出堆棧

2020-08-10 08:37:32

漏洞安全數據

2010-09-08 15:43:18

2011-03-23 12:39:44

2018-11-01 08:31:05

2022-08-09 08:31:40

C -gets函數漏洞

2011-11-15 16:00:42

2010-09-29 15:10:58

2019-01-11 09:00:00

2011-03-23 11:35:00

2015-09-02 09:01:03

2009-05-13 09:21:48

2012-09-27 09:25:50

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日韩视频区 | 91www在线观看 | 欧美在线综合 | 国产精品一区二区三区免费观看 | 日韩成人一区 | 日韩精品在线播放 | 国产成人高清在线观看 | 中文字幕精品一区久久久久 | 久久精品久久久久久 | 日韩免费福利视频 | 国产精品美女久久久久久免费 | 国产成人a亚洲精品 | 欧美精品a∨在线观看不卡 国产精品久久国产精品 | 国产精品自产av一区二区三区 | 91精品一区二区三区久久久久久 | 国产精选一区 | 日韩欧美精品在线 | 久久久资源 | 91精品一区二区 | 国产亚洲精品精品国产亚洲综合 | 欧美日韩精品久久久免费观看 | 欧美jizzhd精品欧美巨大免费 | 国产日产精品一区二区三区四区 | 插插宗合网| 国产欧美在线视频 | 欧美激情在线播放 | 欧美一级免费观看 | 婷婷国产一区二区三区 | 老牛影视av一区二区在线观看 | 亚洲性视频网站 | 亚洲精品久久久久中文字幕二区 | 国产欧美在线播放 | 日本黄色一级视频 | 日韩一级黄色片 | 精品国产乱码久久久久久影片 | 日韩在线小视频 | 亚洲精品一区二区三区蜜桃久 | 91精品国产91久久久久久最新 | 噜噜噜色网 | 国产黄色大片 | 免费观看的av毛片的网站 |