1 初識溢位

2021-06-16 07:52:53 字數 1036 閱讀 6861

一直沒系統的學下這個,以為這玩意早特麼過時的東西,後來看到還是灰常有必要的,所以。。。

溢位是什麼玩意就不介紹了,看個簡單例子:

strcpy原型宣告:extern char *strcpy(char *dest,char *src);

功能:把從src位址開始且含有null結束符的字串賦值到以dest開始的位址空間。它的拷貝時不檢查長度的,她會一直拷一直拷,直到src的結尾,這就是它的弱點。

當然這破b函式微軟早不提倡用了,自己也能寫個安全多了的,是吧小平同學?

#include #include "windows.h"

char szname="evil0r";

int main()

return 0;

}

編譯執行沒錯,輸出evil0r對應的ascii碼。

當我們把字串改下,改為abcdefgh時,特麼的vs08提示溢位了,vc6還能正常輸出,也懶得去找為啥了,拿vc6來看吧。

把字串再改為"abcdefghijklmnopq"再執行下,彈錯了,提示為「0x706f6e6d指令引用的0x706f6e6d記憶體。該記憶體不能為read」。6d6e6f70就是字元mnop。應該看出來了吧,這個覆蓋為函式返回位址去執行了。

看下反彙編**

7:        char szoutput[8];

8: strcpy(szoutput,szname);

0040d468 push offset szname (00424a30)

0040d46d lea eax,[ebp-8]

0040d470 push eax

0040d471 call strcpy (00403660)

0040d476 add esp,8

把szname字串位址壓入棧,然後拿出8個位元組的空間來進行strcpy,不過不好意思,src多了,把下面給覆蓋掉了,這樣也就產生了溢位錯誤

溢位初步(1)

溢位初步 1 2006 11 28 07 43 41 發表 2006 11 24 22 28 00 第 緩衝區溢位 審查 是否存在緩衝區溢位時,將審查工作主要放在通過 p invoke 或者 com 互操作層呼叫非託管 的 上。託管 本身受到緩衝區溢位攻擊的可能性很小,因為無論是否訪問陣列,系統都將...

記憶體溢位 1

1.當專案中包含大量,或者過大 方法1 等比例縮小 複製內容到剪貼簿 bitmapfactory.options options new bitmapfactory.options options.insamplesize 4 方法2 對採用軟引用,及時地進行recyle 操作 複製內容到剪貼簿 s...

IOC技術初識 1

ioc 全稱inversion of control,中文解釋 控制反轉 ioc又稱di 全稱 dependency injection,中文解釋 依賴注入 應用spring提供的ioc 1 需要spring.jar包 2 j2se下的ioc 宣告 iuserinfomanage um null 3...