我想使用「檢查庫」爲malloc(3)編寫一個檢查單元測試。在C中創建malloc()緩衝區溢出0
這個單元測試應該會產生緩衝區溢出。
- 在int變量上分配一個double(即int * ptr = malloc(3))緩衝區溢出?
- 怎麼樣分配一個大於int的最大值的數字?
您能否給我一些緩衝區溢出的簡單例子?
我想使用「檢查庫」爲malloc(3)編寫一個檢查單元測試。在C中創建malloc()緩衝區溢出0
這個單元測試應該會產生緩衝區溢出。
您能否給我一些緩衝區溢出的簡單例子?
寫入或讀取由malloc
分配的緩衝區的末尾會產生undefined behavior,這意味着在發生時不能依賴任何特定行爲。該程序可能似乎工作,它可能會核心轉儲,或者它可能會輸出意外的結果。
因爲溢出一個malloc'ed緩衝區導致未定義的行爲,所以爲它創建測試用例是毫無意義的,除非您正在測試malloc
的特定實現。根據你的問題的措辭,似乎並非如此。
要溢出緩衝區,您需要訪問超出其保證大小或開始之前的緩衝區。分配並不真正訪問任何可見的緩衝區,所以很難看到任何類型的分配是否會成爲緩衝區溢出,除非分配例程本身存在錯誤或其結構已損壞。
在int變量上分配一個double(即int * ptr = malloc(3))緩衝區溢出?
不,因爲沒有緩衝區被訪問。
如何分配一個大於int的最大值的數字?
不,因爲沒有緩衝區被訪問。
要溢出一個緩衝區,你必須首先有一個緩衝區,然後溢出它。例如:
int* j = malloc (2 * sizeof (int));
j[2] = 1;
在這裏,我分配緩衝區與兩個整數空間,然後通過訪問第三整數(0是第一個,1是第二,所以圖2是第三)溢出它。
並且'int i = j [2];'會是一個緩衝區溢出,儘管是讀取而不是寫入操作。它也會訪問未初始化的數據,就像'i = j [0];'或'i = j [1];'它們不是緩衝區溢出,否則就是OK。 –
數字的最大值是多少?所以我不能無限地在一個int值上寫數字。 – surveyCorps
正如我所說,我的測試案例應該會產生緩衝區溢出。我可以這樣做,如果我分配的int指針(int * ptr = malloc(3))我給它一個很大的值(即* ptr = 59595959595959595959595959595)?那麼這是一個緩衝區溢出? – surveyCorps
如果您的平臺上的sizeof(int)> 3'是一個緩衝區溢出。否則,不。 –