#include "stdafx.h"
void helloworld()
void fun() ;
arr[6] = (int)helloworld;
}int main(int argc, char* ar**)
**並沒有呼叫helloworld
,但成功執行了helloworld
很容易看出arr[6] = (int)helloworld;
這行**有問題,將乙個函式名強轉為int
型,並賦值給arr[6]
,而arr[6]
已經超出陣列大小
main()
反彙編
main:
00410790 push ebp
00410791 mov ebp,esp
00410793 sub esp,40h
00410796 push ebx
00410797 push esi
00410798 push edi
00410799 lea edi,[ebp-40h]
0041079c mov ecx,10h
004107a1 mov eax,0cccccccch
004107a6 rep stos dword ptr [edi]
004107a8 call @ilt+15(fun) (00401014)
004107ad xor eax,eax
004107af pop edi
004107b0 pop esi
004107b1 pop ebx
004107b2 add esp,40h
004107b5 cmp ebp,esp
004107b7 call __chkesp (00401140)
004107bc mov esp,ebp
004107be pop ebp
004107bf ret
call
跟進
00401014 jmp fun (00410740)
00401019 jmp helloworld (004106c0)
fun()
反彙編
fun:
00410740 push ebp
00410741 mov ebp,esp
00410743 sub esp,54h
00410746 push ebx
00410747 push esi
00410748 push edi
00410749 lea edi,[ebp-54h]
0041074c mov ecx,15h
00410751 mov eax,0cccccccch
00410756 rep stos dword ptr [edi]
00410758 mov dword ptr [ebp-14h],1
0041075f mov dword ptr [ebp-10h],2
00410766 mov dword ptr [ebp-0ch],3
0041076d mov dword ptr [ebp-8],4
00410774 mov dword ptr [ebp-4],5
0041077b mov dword ptr [ebp+4],offset @ilt+20(helloworld) (00401019)
00410782 pop edi
00410783 pop esi
00410784 pop ebx
00410785 mov esp,ebp
00410787 pop ebp
00410788 ret
初始狀態
堆疊圖:
call
指令執行後
堆疊圖:
jmp
跳轉後,到設定緩衝區後的狀態
這裡要注意[ebp+4]
,此時為004107ad
為函式的返回位址
堆疊圖:
區域性變數設定
int arr[5] = ;
這行**,編譯器會劃分出5
個int
寬度的記憶體空間存放,根據下標由小到大,記憶體位址由低到高。
要分配5
個int
大小的空間,所以從ebp-0x4*0x5
即ebp-0x14
開始分配
區域性變數設定完成後的堆疊圖:
執行arr[6] = (int)helloworld;
發生了生麼?
004110b8 call @ilt+20(helloworld) (00401019)
緩衝區溢位
緩衝區溢位是指當電腦程式向緩衝區內填充的資料位數超過了緩衝區本身的容量。溢位的資料覆蓋在合法資料上。理想情況是,程式檢查資料長度並且不允許輸入超過緩衝區長度的字串。但是絕大多數程式都會假設資料長度總是與所分配的儲存空間相匹配,這就為緩衝區溢位埋下隱患。作業系統所使用的緩衝區又被稱為堆疊,在各個操作程...
緩衝區溢位
緩衝區溢位,簡單的說就是計算機對接收的輸入資料沒有進行有效的檢測 理想的情況是程式檢查資料長度並不允許輸入超過緩衝區長度的字元 向緩衝區內填充資料時超過了緩衝區本身的容量,而導致資料溢位到被分配空間之外的記憶體空間,使得溢位的資料覆蓋了其他記憶體空間的資料。通過往程式的緩衝區寫超出其長度的內容,造成...
基於棧式的緩衝區溢位
緩衝區溢位攻擊是乙個老生常談的問題了,實際上我們所在的這個世界上,每天無時無刻不在發生各種各樣的緩衝區溢位的攻擊,隨著反制技術的不斷公升級,這些攻擊技巧都在大量進行公升級還貸,但,所謂 有壓迫 就有反抗!aslr 位址隨機化 dep 資料執行保護 ascii armoring 位址插零 gs 呼叫 ...