CCmalloc
-=-=-=-=-=
The Magician of the Ivory Tower brought his latest invention for
the master programmer to examine. The magician wheeled a large black
box into the master's office while the master waited in silence.
"This is an integrated, distributed, general-purpose
workstation," began the magician, "ergonomically designed with
a proprietary operating system, sixth generation languages,
and multiple state of the art user interfaces. It took my assistants
several hundred man years to construct. Is it not amazing?"
The master raised his eyebrows slightly. "It is indeed amazing,"
he said.
"Corporate Headquarters has commanded," continued the magician,
"that everyone use this workstation as a platform for new programs.
Do you agree to this?"
"Certainly," replied the master, "I will have it transported
to the data center immediately!" And the magician returned to his
tower, well pleased.
Several days later, a novice wandered into the office of the
master programmer and said, "I cannot find the listing for my new
program. Do you know where it might be?"
"Yes," replied the master, "the listings are stacked on the
platform in the data center."
-- Geoffrey James, "The Tao of Programming"
Další poměrně šikovnou knihovnou pro kontrolu paměti je
ccmalloc. Ta se specializuje zejména na hledání zapomenutých bloků,
ale podporuje i některé další testy. Umí velmi pěkně nakonci
sepsat seznam zapomenutých bloků srovnaných podle velikosti,
nebo jiných kriterií. Zobrazuje také některé užitečné statistiky,
jako je maximální použitá paměť atd. Její použití je velmi podobné
jako u libefence, nebo jiných knihoven. Hlavní sílu ccmallocu
vidím v jeho jednoduchosti na použití a poměrně pěkně zpracováných
výpisech.
Výsledky testů jsou následující:
Chyby pro použití haldy
zapomenuté naalokované bloky paměti najde a ukáže řádky
uvolnění nenaalokovaného bloku free() in wrapper called before malloc()
vícenásobné uvolnění bloku free() called twice for block at
0x080587d0 of size 100, kde byl
naalokován a kde byl už uvolněn
alokace a realokace bloku o velikosti 0 malloc(0)
použití paměti bez testu na selhání malloc
Chyby pro použití ukazatelů
použití uvolněného bloku pro zápis
použití uvolněného bloku pro čtení
zápis za koncem pole v zásobníku (buffer owerflow)
zápis za koncem alokovaného bloku check-count=3: end of block at
0x080587e0 of size 10 changed,
ukáže, kde byl naalokován
čtení za koncem alokovaného bloku
zápis daleko za koncem alokovaného bloku
zápis před koncem alokovaného bloku (perhaps an 'under'write occured)
čtení před koncem alokovaného bloku
čtení neinicalizované paměti
Zdrojové kódy najdete na:
sunsite.ms.mff.cuni.cz/pub/Linux/devel/lang/c.
Podporované platofrmy: Linux, SunOS 4.3.1, Solaris 2.5 (aka SunOS 5.5)
výheň