執行此代碼時,庫dmalloc以某種方式確定存在訪問超出界限的內存。因爲它分配了1023個元素並試圖訪問第1024個元素。 (數組索引是從0開始的)。dmalloc庫如何確定發生了越界訪問發生?
#include "dmalloc.h"
int main(){
char *ch = malloc(1023);
ch[1023] = 0x00;
return 0;
}
它怎麼知道?
執行此代碼時,庫dmalloc以某種方式確定存在訪問超出界限的內存。因爲它分配了1023個元素並試圖訪問第1024個元素。 (數組索引是從0開始的)。dmalloc庫如何確定發生了越界訪問發生?
#include "dmalloc.h"
int main(){
char *ch = malloc(1023);
ch[1023] = 0x00;
return 0;
}
它怎麼知道?
當使用dmalloc庫時,它實際上分配更多比您請求。它將之前的一個區域和之後的一個保留返回給您。這些區域充滿了特殊值,當您釋放內存時,這些值將被檢查。如果這些值不正確,那麼你顯然已經修改了內存越界。
最簡單的方法是使用標記,它們只是由dmalloc用已知模式填充的內存塊。然後它可以檢查該模式是否已被銷燬,並標記錯誤。
這包含在http://dmalloc.com/docs/latest/online/dmalloc_7.html#SEC9上的dmalloc文檔中,其中包含更多信息,網址爲http://dmalloc.com/docs/latest/在線/ dmalloc_17.html。 –