2012-09-06 46 views
0

執行此代碼時,庫dmalloc以某種方式確定存在訪問超出界限的內存。因爲它分配了1023個元素並試圖訪問第1024個元素。 (數組索引是從0開始的)。dmalloc庫如何確定發生了越界訪問發生?

#include "dmalloc.h" 
int main(){ 

    char *ch = malloc(1023); 
    ch[1023] = 0x00; 
    return 0; 
} 

它怎麼知道?

+1

這包含在http://dmalloc.com/docs/latest/online/dmalloc_7.html#SEC9上的dmalloc文檔中,其中包含更多信息,網址爲http://dmalloc.com/docs/latest/在線/ dmalloc_17.html。 –

回答

1

當使用dmalloc庫時,它實際上分配更多比您請求。它將之前的一個區域之後的一個保留返回給您。這些區域充滿了特殊值,當您釋放內存時,這些值將被檢查。如果這些值不正確,那麼你顯然已經修改了內存越界。

0

最簡單的方法是使用標記,它們只是由dmalloc用已知模式填充的內存塊。然後它可以檢查該模式是否已被銷燬,並標記錯誤。