Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«ΠžΡΠ½ΠΎΠ²Ρ‹ программирования Π² LinuxΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 123

Автор НСйл ΠœΡΡ‚ΡŒΡŽ

ΠžΠ±Ρ‹Ρ‡Π½ΠΎ Π±Π»ΠΎΠΊΠΈ памяти Π²Ρ‹Π΄Π΅Π»ΡΡŽΡ‚ΡΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ malloc ΠΈ ΠΏΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°ΡŽΡ‚ΡΡ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ-указатСлям. Если пСрСмСнная-ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ измСняСтся, ΠΈ Π½Π΅Ρ‚ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ, ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΡ… Π½Π° Π±Π»ΠΎΠΊ памяти, ΠΎΠ½ становится нСдоступным. Π­Ρ‚ΠΎ ΡƒΡ‚Π΅Ρ‡ΠΊΠ° памяти, Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π°Ρ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Если Π²Ρ‹ потСряСтС большой объСм памяти, ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρ‹ вашСй систСмы, Π² ΠΊΠΎΠ½Ρ†Π΅ ΠΊΠΎΠ½Ρ†ΠΎΠ², снизится, ΠΈ систСма ΡƒΠΉΠ΄Π΅Ρ‚ Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Ρ‹ памяти.

Если Π²Ρ‹ записываСтС Π² ΠΎΠ±Π»Π°ΡΡ‚ΡŒ, Ρ€Π°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½Π½ΡƒΡŽ послС ΠΊΠΎΠ½Ρ†Π° Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ° (ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅Π΄ Π½Π°Ρ‡Π°Π»ΠΎΠΌ Π±Π»ΠΎΠΊΠ°), Π²Ρ‹ с большой Π΄ΠΎΠ»Π΅ΠΉ вСроятности ΠΏΠΎΠ²Ρ€Π΅Π΄ΠΈΡ‚Π΅ структуры Π΄Π°Π½Π½Ρ‹Ρ…, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ malloc, слСдящСй Π·Π° распрСдСлСниСм памяти. Π’ этом случаС Π² ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π²Ρ‹Π·ΠΎΠ² malloc ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ free ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΡŽ сСгмСнтации, ΠΈ ваша ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡΡ Π°Π²Π°Ρ€ΠΈΠΉΠ½ΠΎ. ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ мСста возникновСния сбоя ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ ΠΎΡ‡Π΅Π½ΡŒ Ρ‚Ρ€ΡƒΠ΄Π½ΠΎΠΉ Π·Π°Π΄Π°Ρ‡Π΅ΠΉ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠ³Π»ΠΎ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ Π·Π°Π΄ΠΎΠ»Π³ΠΎ Π΄ΠΎ события, Π²Ρ‹Π·Π²Π°Π²ΡˆΠ΅Π³ΠΎ Π°Π²Π°Ρ€ΠΈΠΉΠ½ΠΎΠ΅ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

ΠΠ΅ΡƒΠ΄ΠΈΠ²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ, Ρ‡Ρ‚ΠΎ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ коммСрчСскиС ΠΈ бСсплатныС срСдства, способныС ΠΏΠΎΠΌΠΎΡ‡ΡŒ Π² Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ этих Π΄Π²ΡƒΡ… Ρ‚ΠΈΠΏΠΎΠ². НапримСр, Π΅ΡΡ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ Ρ€Π°Π·Π½Ρ‹Ρ… вСрсий Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ malloc ΠΈ free, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ содСрТат Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄ для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ выдСлСния ΠΈ освобоТдСния Π±Π»ΠΎΠΊΠΎΠ² памяти ΠΈ ΠΏΡ‹Ρ‚Π°ΡŽΡ‚ΡΡ ΡƒΡ‡Π΅ΡΡ‚ΡŒ Π΄Π²ΠΎΠΉΠ½ΠΎΠ΅ освобоТдСниС Π±Π»ΠΎΠΊΠ° ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ‚ΠΈΠΏΡ‹ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ³ΠΎ использования памяти.

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 ΠΈ связанныС с Π½Π΅ΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ вСрсиями, ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‰ΠΈΠΌΠΈ Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½Ρ‹Π΅ срСдства Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ памяти для Π·Π°Ρ‰ΠΈΡ‚Ρ‹ ΠΎΡ‚ нСсанкционированного доступа ΠΊ памяти. ΠŸΡ€ΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠΈ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ³ΠΎ обращСния ΠΊ памяти пороТдаСтся сигнал Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΡ сСгмСнтации ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° останавливаСтся.

valgrind

БрСдство valgrind способно ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ²Π°Ρ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΈΠ· ΠΎΠ±ΡΡƒΠΆΠ΄Π°Π²ΡˆΠΈΡ…ΡΡ Π½Π°ΠΌΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ (ΡƒΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ 10.4). ΠŸΡ€Π΅ΠΆΠ΄Π΅ всСго, ΠΎΠ½ΠΎ ΡƒΠΌΠ΅Π΅Ρ‚ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ ошибки доступа, ΠΊ массиву ΠΈ ΡƒΡ‚Π΅Ρ‡ΠΊΠΈ памяти. Π­Ρ‚ΠΎ срСдство, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π½Π΅ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΎ Π² ваш дистрибутив Linux, Π½ΠΎ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π½Π° Web-сайтС http://valgrind.org.

Для примСнСния valgrind Π΄Π°ΠΆΠ΅ Π½Π΅ трСбуСтся пСрСкомпиляции ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΈ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ ошибки доступа ΠΊ памяти Π² Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰Π΅ΠΉΡΡ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅. Π”Π°Π½Π½ΠΎΠ΅ срСдство заслуТиваСт внимания; ΠΎΠ½ΠΎ примСняСтся Π² основных Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°Ρ…, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ срСду KDE вСрсии 3.

Π£ΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ 10.4. БрСдство valgrind

Π”Π°Π»Π΅Π΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° checker.c, которая выдСляСт Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ объСм памяти, Ρ‡ΠΈΡ‚Π°Π΅Ρ‚ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ памяти ΠΈ записываСт Π΄Π°Π½Π½Ρ‹Π΅ Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Π°ΠΌΠΈ Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ участка, Π° Π·Π°Ρ‚Π΅ΠΌ Π΄Π΅Π»Π°Π΅Ρ‚ Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ участок нСдоступным.

#include <stdio.h>

#include <stdlib.h>


int main() {

 char *ptr = (char *)malloc(1024);

 char ch;

 /* НСинициализированноС Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ */

 ch = ptr[1024];

 /* Π—Π°ΠΏΠΈΡΡŒ Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Π°ΠΌΠΈ Π±Π»ΠΎΠΊΠ° */

 ptr[1024] = 0;

 /* ΠŸΠΎΡ‚Π΅Ρ€Ρ Π±Π»ΠΎΠΊΠ° */

 ptr = 0;

 exit(0);

}

Для примСнСния valgrind Π²Ρ‹ просто выполняСтС ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ valgrind, ΠΏΠ΅Ρ€Π΅Π΄Π°Π² Π΅ΠΉ ΠΎΠΏΡ†ΠΈΠΈ, Π·Π°Π΄Π°ΡŽΡ‰ΠΈΠ΅ Π½ΡƒΠΆΠ½Ρ‹Π΅ Π²ΠΈΠ΄Ρ‹ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΠΊ, ΠΈ Π΄Π°Π»Π΅Π΅ ΡƒΠΊΠ°Π·Π°Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ для выполнСния с Π΅Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ (Ссли Ρ‚Π°ΠΊΠΎΠ²Ρ‹Π΅ Π΅ΡΡ‚ΡŒ).

ΠŸΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ с valgrind Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ мноТСство ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ:

$ valgrind --leak-check=yes -v ./checker

==4780== Memcheck, a memory error detector.

==4780== Copyright (C) 2002-2007, and GNU GPL'd, by Julian Seward et al.

==4780== Using LibVEX rev 1732, a library for dynamic binary translation.

==4780== Copyright (C) 2004-2007, and GNU GPL'd, by OpenWorks LLP.

==4780== Using valgrind-3.2.3, a dynamic binary instrumentation framework.

==4780== Copyright (C) 2000-2007, and GNU GPL'd, by Julian Seward et al.

==4780==

--4780-- Command line

--4780--    ./checker

--4780-- Startup, with flags:

--4780--    --leak-check=yes

--4780--    -v

--4780-- Contents of /Ρ€roc/version:

--4780-- Linux version 2-6.20.2-2-default ( [email protected]) (gcc version 4.1.3 20070218 (prerelease) (SUSE Linux)) #1 SMP Fri Mar 9 21:54:10 UTC 2007

--4780-- Arch and hwcaps: X86, x86-sse1-sse2

--4780-- Page sizes: currently 4096, max supported 4096

--4780-- Valgrind library directory: /usr/lib/valgrind

--4780-- Reading syms from /lib/ld-2.5.so (0x4000000)

--4780-- Reading syms from /home/neil/BLP4e/chapter10/checker (0x8048000)

--4780-- Reading syms from /usr/lib/valgrind/x86-linux/memcheck (0x38000000)

--4780--    object doesn't have a symbol table

--4780--    object doesn't have a dynamic symbol table

--4780-- Reading suppressions file: /usr/lib/valgrind/default.supp

--4780-- REDIR: 0x40158B0 (index) redirected to 0x38027EDB (???)

--4780-- Reading syms from /usr/lib/valgrind/x86-linux/vgpreload_core.so (0x401E000)

--4780--    object doesn't have a symbol table

--4780-- Reading syms from /usr/lib/valgrind/x86-linux/vgpreload_memcheck.so (0x4021000)

--4780--    object doesn't have a symbol table

==4780= WARNING: new redirection conflicts with existing -- ignoring it

--4780--    new: 0x040158B0 (index ) R-> 0x04024490 index

--4780-- REDIR: 0x4015A50 (strlen) redirected to 0x4024540 (strlen)

--4780-- Reading syms from /lib/libc-2.5.so (0x4043000)

--4780-- REDIR: 0x40ADFF0 (rindex) redirected to 0x4024370 (rindex)

--4780-- REDIR: 0x40AAF00 (malloc) redirected to 0x4023700 (malloc)

==4780== Invalid read of size 1

==4780==    at 0x804842C: main (checker.с: 10)

==4780== Address 0x4170428 is 0 bytes after a block of size 1,024 alloc'd

==4780==    at 0x4023785: malloc (in /usr/lib/valgrind/x86-linux/vgpreload_memcheck.so)

==4780==    by 0x8048420: main (checker.c: 6)

=4780=

==4780== Invalid write of size 1

==4780==    at 0x804843A: main (checker.с: 13)

==4780== Address 0x4170428 is 0 bytes after a block of size 1,024 alloc'd

==4780==    at 0x4 023785: malloc (in /usr/lib/valgrind/x86-linux/vgpreload_memcheck.so)

==4780==    by 0x8048420: main (checker.c: 6)

--4780-- REDIR: 0x40A8BB0 (free) redirected to 0x402331A (free)

--4780-- REDIR: 0x40AEE70 (memset) redirected to 0x40248A0 (memset)

==4780==

==4780== ERROR SUMMARY: 2 errors from 2 contexts (suppressed: 3 from 1)

==4780==

==4780== 1 errors in context 1 of 2:

==4780== Invalid write of size 1

==4780==    at 0x804843A: main (checker.с: 13)

==4780== Address 0x4170428 is 0 bytes after a block of size 1,024 alloc'd

==4780==    at 0x4023785: malloc (in /usr/lib/valgrind/x86-linux/vgpreload_memcheck.so)

==4780==    by 0x80484 20: main (checker.c: 6)

==4780==

==4780== 1 errors in context 2 of 2:

==4780== Invalid read of size 1

==4780==    at 0x804842C: main (checker.c:10)

==4780== Address 0x4170428 is 0-bytes after a block of size 1,024 alloc'd

==4780==    at 0x4023785: malloc (in /usr/lib/valgrind/x86-linux/vgpreload_memcheck.so)

==4780==    by 0x8048420: main (checker.с: 6)

--4780--

--4780-- supp: 3 dl-hack3

==4780==

==4780== IN SUMMARY: 2 errors from 2 contexts (suppressed: 3 from 1)

==4780==

==4780== malloc/free: in use at exit: 1,024 bytes in 1 blocks.

==4780== malloc/free: 1 allocs, 0 frees, 1,024 bytes allocated.

==4780==

==4780== searching for pointers to 1 not-freed blocks.

==4780== checked 65,444 bytes.

==4780==

==4780==

==4780== 1,024 bytes in 1 blocks are definitely lost in loss record 1 of 1

==4780==    at 0x4023785: malloc (in /usr/lib/valgrind/x86-linux/vgpreload_memcheck.so)

==4780==    by 0x8048420: main (checker.c: 6)

==4780==

==4780== LEAK SUMMARY:

==4780==    definitely lost: 1,024 bytes in 1 blocks.

==4780==      possibly lost: 0 bytes in 0 blocks.