Пример поведения тестовой программы, скомпонованной с Electric Fence

Ниже приведен пример поведения тестовой программы, скомпонованной с Electric Fence, после установки Е F__AL I GNMENT в 1.

Мини-картинка

$ export EF_ALIGNMENT1 $ gdb broken (gdb) run Starting program: /usr/src/lad/code/broken Electric Fence 2.2.0 Copyright (C) 1987 1999 Bruce Perens.

Program received signal SIGSEGV, Segmentation fault.

0x002a78c6 in strcpyO from /lib/tls/libc. so.6

(gdb) where 0 0x002a78c6 in strcpyO from /lib/tls/libc. so.6

1 0x08048522 in broken() at broken. c:15

2 0x08048638 in main() at broken. с:47

На этот раз Electric Fence нашел переполнение буфера, которое произошло первым.

Другие средства Electric Fence не только помогает обнаружить переполнение буфера, но и может найти недогрузку буфера (выполняя доступ к памяти, расположенной перед началом выделяемого malloc () буфера) и получает доступ к памяти, освобождаемой с помощью free (). Если переменная окружения EF_PROTECT_BELOW установлена в 1, Electric Fence перехватывает недогрузку буфера вместо его переполнения. Это происходит путем размещения недоступной области памяти непосредственно перед фактической областью памяти, возвращаемой функцией malloc (). При этом Electric Fence не сможет обнаружить переполнение буфера изза страничной организации памяти, реализованной в большинстве процессоров. Выравнивание памяти может затруднить обнаружение переполнения буфера, однако оно не влияет на недогрузку буфера. Функция malloc () из Electric Fence всегда возвращает адрес памяти в начале страницы, которая всегда выровнена по границе слова.

Мини-картинка

Если EF_PROTECT_FREE установлена в 1, free () делает переданную ей область памяти недоступной, но не возвращает ее в пул свободной памяти. Если программа пытается получить доступ к этой памяти на любом этапе в будущем, ядро обнаружит несанкционированный доступ. Настройка EF_PROTECT_FREE помогает удостовериться, что код ни на одном этапе выполнения не использует память, освобожденную с помощью free ().


Ведете ли вы блог?

Да
Нет
Планирую


Результаты опроса

Новостной блок