Книга: Основы программирования в Linux

ElectricFence

ElectricFence

Библиотека ElectricFence была разработана Брюсом Перенсом (Bruce Perens). Она доступна как необязательный компонент в некоторых дистрибутивах Linux, таких как Red Hat (Enterprise и Fedora), SUSE и openSUSE, и может быть легко найдена в Интернете. Это средство пытается применять виртуальную память системы Linux для защиты памяти, используемой функциями malloc и free, и аварийного останова программы в момент повреждения памяти.

Выполните упражнение 10.3.

Упражнение 10.3. Применение библиотеки ElectricFence

Далее приведена программа efence.c, которая выделяет память с помощью функции malloc и пишет данные за концом выделенного блока. Познакомьтесь с ней и посмотрите, что произойдет.

#include <stdio.h>
#include <stdlib.h>
int main() {
 char *ptr = (char *)malloc(1024);
 ptr[0] = 0;
 /* Теперь пишет за пределы блока */
 ptr[1024] = 0;
 exit(0);
}

Когда вы откомпилируете и выполните программу, то не увидите некорректного поведения. Однако вероятно, что область памяти, выделенная malloc, повреждена, и вы, в конце концов, попадете в беду.

$ cc -о efence efence.с
$ ./efence
$

Тем не менее, если вы возьмете ту же самую программу и скомпонуйте ее с библиотекой ElectricFence (libefence.a), то получите немедленный отклик:

$ cc -о efence efence.с -lefence
$ ./efence
Electric Fence 2.2.0 Copyright (С) 1987-1999 Bruce Perens <[email protected]>
Segmentation fault
$

Выполнение под контролем отладчика позволяет получить подробное описание проблемы;

$ cc -g -о efence efence.с -lefence
$ gdb efence
(gdb) run
Starting program: /home/neil/BLP4e/chapter10/efence
Electric Fence 2.2.0 Copyright (C) 1987-1999 Bruce Perens [email protected]
Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread 1024 (LWP 1869)]
0x08048512 in main () at efence.c:10
10  ptr[1024] = 0;
(gdb)

Как это работает

Библиотека ElectricFence заменяет функцию malloc и связанные с ней функции версиями, применяющими аппаратные средства виртуальной памяти для защиты от несанкционированного доступа к памяти. При возникновении подобного обращения к памяти порождается сигнал нарушения сегментации и программа останавливается.

Оглавление книги

Оглавление статьи/книги

Генерация: 1.625. Запросов К БД/Cache: 3 / 1
поделиться
Вверх Вниз