User Tools

Site Tools


linuxbog:program:vaerktoej-efence
Linux – Friheden til at programmere: Version 2.5.20050330 – 2020-12-31
forrige Kapitel 5. Programmørens værktøjskasse næste

5.9. Electric Fence

Electric Fence er et bibliotek der er uvurderligt til hurtigt finde

bufferoverløb eller -underløb.  Et typisk problem i C og C++ (men
praktisk taget ikke i nogle andre sprog) er at man allokerer en tabel,
men forsøger at skrive efter tabellens slut eller før dens start. En
anden typisk fejl er at allokere en streng der er for lille, som i
dette eksempel:<code>#include <stdio.h>

#include <string.h>

int main(void) {

 char* p=(char*)malloc(16*sizeof(char)); 
 char* q=(char*)malloc(16*sizeof(char)); 

test for NULL strcpy(q,“efence test”); strcpy(p,“efence test buffer overflow”); 27 tegn lang!!

 printf("q:%s\n",q);
 printf("p:%s\n",p);

}</code>

Oversættes dette program med gcc -o test test.c ,

så kan der ske alt muligt når det køres, men typisk vil det skrive:<code>q:low

p:efence test buffer overflow</code>

En streng kopieres til strengpegerenp, men

strengen er længere end den hukommelsesblok der er
allokeret. Strcpy overskriver derfor delvist strengen q "efence
test". Et program kan sagtens køre videre efter et bufferoverløb,
men måske er dette bufferoverløb årsagen til at programmet fejler
katastrofalt en halv time senere. Det kan derfor være uhyre svært at
finde denne type fejl da de to ting tilsyneladende vil være helt
urelaterede.

Oversættes programmet i stedet med gcc -o test test.c -ggdb -lefence vil programmet fejle og gemme encore-fil når det udfører den anden strcpy()

linje.  Køres **ddd test core** så vil debuggeren
fortælle i hvilken linje bufferoverløbet skete. **man
efence** giver en masse information om hvordan efence
virker, og hvordan det kan bruges til at teste for bufferunderløb og
meget andet.

forrige hjem næste
Gettext op Brug af oversættelsesfiler (“makefiles”)
linuxbog/program/vaerktoej-efence.txt · Last modified: by 127.0.0.1

Except where otherwise noted, content on this wiki is licensed under the following license: CC Attribution-Share Alike 4.0 International
CC Attribution-Share Alike 4.0 International Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki

Brug af AI : Al tekst kán være uddrag af AI genereret tekst og kan være fejlbehæftet.
AI kan lave fejl og det kan mennesker også, men al tekst er gennemgået af et menneske for fejl, og personlig bias kan være tilføjet.