緩沖區(qū)溢出解密二
互聯(lián)網(wǎng) 發(fā)布時間:2008-10-08 19:04:07 作者:佚名
我要評論

而如果ESP被PUSH到堆棧,這是堆棧的表示:
|_parametre_I___| EBP 12
|_parametre II__| EBP 8
|_return adress_| EBP 4
|___saved_ESP___| EBP ESP
|_local var I __| EBP-4
|_local var II__| EBP-8
在上面的圖中,變量I 和II是
而如果ESP被PUSH到堆棧,這是堆棧的表示:
|_parametre_I___| EBP 12
|_parametre II__| EBP 8
|_return adress_| EBP 4
|___saved_ESP___| EBP ESP
|_local var I __| EBP-4
|_local var II__| EBP-8
在上面的圖中,變量I 和II是傳遞給函數(shù)的參數(shù)。在返回地址和保存ESP之后,var I和II是函數(shù)的局部變量?,F(xiàn)在,如果我們總結(jié)所有我們所講的,當(dāng)調(diào)用一個函數(shù)的時候:
1.我們保存老的堆棧指針,PUSH它到堆棧 2.我們保存下一個指令的地址(返回地址),PUSH它到堆棧。3.我們開始執(zhí)行程序指令。
當(dāng)我們調(diào)用一個函數(shù)時,上面3步都做了。
讓我們在一個生動的例子中看堆棧的操作。
a.c :
void f(int a, int b, int c)
{
char z[4];
}
void main()
{
f(1, 2, 3);
} 用-g標(biāo)志編譯這個從而能夠調(diào)試:
[murat@victim murat]$ gcc -g a.c -o a
讓我們看看這里發(fā)生了什么:
[murat@victim murat]$ gdb -q ./a
(gdb) disas main
Dump of assembler code for function main:
0x8048448 : pushl 雙
0x8048449 : movl %esp,雙
0x804844b : pushl $0x3
0x804844d : pushl $0x2
0x804844f : pushl $0x1
0x8048451 : call 0x8048440
0x8048456 : addl $0xc,%esp
0x8048459 : leave
0x804845a : ret
End of assembler dump.
(gdb)
以上可見,main()函數(shù)中第一個指令是:
0x8048448 : pushl 雙
它支持老的指針,并把它壓入堆棧。接著,拷貝老的堆棧指針倒ebp寄存器:
0x8048449 : movl %esp,雙
因而,從那時起,在函數(shù)中,我們將用EBP引用函數(shù)的局部變量。這兩個指令被稱為”程序引入”。接著,我們反序PUSH函數(shù)f()的參數(shù)到堆棧中。
0x804844b : pushl $0x3
0x804844d : pushl $0x2
0x804844f : pushl $0x1
我們調(diào)用這個函數(shù):
0x8048451 : call 0x8048440
如我們已經(jīng)通過CALL調(diào)用解釋的那樣,我們PUSH指令addl $0xc,%esp的地址0x8048456到堆棧。函數(shù)RET調(diào)用后,我們加12或者十六進(jìn)制中的0xc(因為我們推入3個參數(shù)到堆棧中,每一個分配了4個字節(jié)(整型))。 接著我們離開main()函數(shù),并且返回:
0x8048459 : leave
0x804845a : ret
好,在函數(shù)f()內(nèi)部發(fā)生了什么呢?
(gdb)
disas f
Dump of assembler code for function f:
0x8048440 : pushl 雙
0x8048441 : movl %esp,雙
0x8048443 : subl $0x4,%esp
0x8048446 : leave
0x8048447 : ret
End of assembler dump.
(gdb)
開始兩個指令都是一樣的。它們是程序引入。接著我們看a:
0x8048443 : subl $0x4,%esp
從ESP減去了4個字節(jié)。這是為局部變量z分配空間。記得我們定義它為char z[4]?它是一個4字節(jié)的字符數(shù)組。最后,在末尾,函數(shù)返回:
0x8048446 : leave
0x8048447 : ret
相關(guān)文章
- “CMOS密碼”就是通常所說的“開機(jī)密碼”,主要是為了防止別人使用自已的計算機(jī),設(shè)置的一個屏障2023-08-01
QQScreenShot之逆向并提取QQ截圖--OCR和其他功能
上一篇文章逆向并提取QQ截圖沒有提取OCR功能, 再次逆向我發(fā)現(xiàn)是可以本地調(diào)用QQ的OCR的,但翻譯按鈕確實沒啥用, 于是Patch了翻譯按鈕事件, 改為了將截圖用百度以圖搜圖搜索.2023-02-04- QQ截圖是我用過的最好用的截圖工具, 由于基本不在電腦上登QQ了, 于是就想將其提取出獨立版目前除了屏幕錄制功能其他都逆出來了, 在此分享一下2023-02-04
非系統(tǒng)分區(qū)使用BitLocker加密導(dǎo)致軟件無法安裝的解決方法
很多電腦用戶在考慮自己電腦磁盤分區(qū)安全時會采用 Windows 自帶的 BitLocker 加密工具對電腦磁盤分區(qū)進(jìn)行加密。但有些人加密后就會忘記自己設(shè)置的密碼從而導(dǎo)致在安裝其它軟2020-11-25防止離職員工帶走客戶、防止內(nèi)部員工泄密、避免華為員工泄密事件的發(fā)生
這篇文章為大家詳細(xì)介紹了如何才能防止離職員工帶走客戶、防止內(nèi)部員工泄密、避免華為員工泄密事件的發(fā)生,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-06-27徹底防止計算機(jī)泄密、重要涉密人員離職泄密、涉密人員離崗離職前防范舉
近些年企業(yè)商業(yè)機(jī)密泄漏的事件屢有發(fā)生,這篇文章主要教大家如何徹底防止計算機(jī)泄密、重要涉密人員離職泄密、告訴大家涉密人員離崗離職前的防范舉措,具有一定的參考價值,2017-06-27- 最近有電腦用戶反應(yīng)量子計算機(jī)可以破解下載的所有的加密算法嗎?其實也不是不可以,下面虛擬就為大家講解買臺量子計算機(jī),如何分分鐘破解加密算法2016-09-26
怎么破解Webshell密碼 Burpsuite破解Webshell密碼圖文教程
webshell是以asp、php、jsp或者cgi等網(wǎng)頁文件形式存在的一種命令執(zhí)行環(huán)境,一種網(wǎng)頁后門。黑客通常會通過它控制別人網(wǎng)絡(luò)服務(wù)器,那么怎么破解webshell密碼呢?一起來看看吧2016-09-19- 本文討論了針對Linux系統(tǒng)全盤加密的冷啟動攻擊,大家都認(rèn)為這種攻擊是可行的,但執(zhí)行這么一次攻擊有多難?攻擊的可行性有多少呢?需要的朋友可以參考下2015-12-28
防止泄露公司機(jī)密、企業(yè)數(shù)據(jù)防泄密軟件排名、電腦文件加密軟件排行
面對日漸嚴(yán)重的內(nèi)部泄密事件,我們?nèi)绾问刈o(hù)企業(yè)的核心信息,如何防止內(nèi)部泄密也就成了擺在各個企業(yè)領(lǐng)導(dǎo)面前的一大問題。其實,針對內(nèi)網(wǎng)安全,防止內(nèi)部信息泄漏早已有了比較2015-12-17