LINUX.ORG.RU

История изменений

Исправление SZT, (текущая версия) :

Не понятно ничего из этого кода. Есть полные исходники? Я бы например добавил следилку, чтобы на каждый malloc realloc free на который имеет право(может) указывать этот твой SmlIndex * index создавался(malloc/alloca) или модифицировался(realloc) или удалялся(free) элемент из специального связного списка, вот примерно вот такого

struct l_l_memreg
{
    struct l_l_memreg *next;
    struct l_l_memreg *prev;
    void *fr_addr;
    void *to_addr;
};
И чтобы вот эту строчку
*index = (warehouse.elemcount - 1); 
переписать как
if (checkifallowed(index) == FAIL ) {error();}
*index = (warehouse.elemcount - 1);
который пробежится по всем элементам этого связного списка и проверит, попадает ли этот index в аллоцированную память, которую разрешено под этот index. В качестве функции error можно например распечатать бектрейс, т.е. ту последовательность функций и аргументы переданные в них, которая привела к тому что эта штука пишет в запрещенное место. http://man7.org/linux/man-pages/man3/backtrace.3.html вот что есть на этот счет, это GNU экстеншен. Можно конечно и через отладчик поизвращаться как-нибудь. Думаю, идея ясна

Исходная версия SZT, :

Не понятно ничего из этого кода. Есть полные исходники? Я бы например добавил следилку, чтобы на каждый malloc realloc free на который имеет право(может) указывать этот твой SmlIndex * index создавался(malloc/alloca) или модифицировался(realloc) или удалялся(free) элемент из специального связного списка, вот примерно вот такого

struct l_l_memreg
{
    l_l_memreg *next;
    l_l_memreg *prev;
    void *fr_addr;
    void *to_addr;
};
И чтобы вот эту строчку
*index = (warehouse.elemcount - 1); 
переписать как
if (checkifallowed(index) == FAIL ) {error();}
*index = (warehouse.elemcount - 1);
который пробежится по всем элементам этого связного списка и проверит, попадает ли этот index в аллоцированную память, которую разрешено под этот index. В качестве функции error можно например распечатать бектрейс, т.е. ту последовательность функций и аргументы переданные в них, которая привела к тому что эта штука пишет в запрещенное место. http://man7.org/linux/man-pages/man3/backtrace.3.html вот что есть на этот счет, это GNU экстеншен. Можно конечно и через отладчик поизвращаться как-нибудь. Думаю, идея ясна