一直沒系統的學下這個,以為這玩意早特麼過時的東西,後來看到還是灰常有必要的,所以。。。
溢位是什麼玩意就不介紹了,看個簡單例子:
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...