$ <b>cc -g ch15-badmem1.c -ΠΎ ch15-badmem1</b> /* ΠΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠ°ΠΊ ΠΎΠ±ΡΡΠ½ΠΎ */$ <b>ef ch15-badmem1 -b</b> /* ΠΠ°ΠΏΡΡΡΠΈΡΡ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ef, ΡΠΎΠ·Π΄Π°Π΅Ρ Π΄Π°ΠΌΠΏ ΡΠ΄ΡΠ° */Electric Fence 2.2.0 Copyright (Π‘) 1987-1999 Bruce Perens <[email protected]>p = <not 30 bytes>/usr/bin/ef: line 20: 28005 Segmentation fault (core dumped)( export LD_PRELOAD=libefence.so.0.0; exec $* )$ <b>ef ch15-badmem1 -f</b> /* ΠΠ°ΠΏΡΡΡΠΈΡΡ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ef, ΡΠ½ΠΎΠ²Π° ΡΠΎΠ·Π΄Π°Π΅Ρ Π΄Π°ΠΌΠΏ ΡΠ΄ΡΠ° */Electric Fence 2.2.0 Copyright (Π‘) 1987-1999 Bruce Perens <[email protected]>p = <not 30 bytes>/usr/bin/ef: line 20: 28007 Segmentation fault (core dumped)( export LD_PRELOAD=libefence.so.0.0; exec $* )$ <b>ls -l core*</b> /* Linux ΡΠΎΠ·Π΄Π°Π΅Ρ Π΄Π»Ρ Π½Π°Ρ ΡΠ°Π·Π½ΡΠ΅ ΡΠ°ΠΉΠ»Ρ core */-rw------- 1 arnold devel 217088 Aug 28 15:40 core.28005-rw------- 1 arnold devel 212992 Aug 28 15:40 core.28007GNU/Linux ΡΠΎΠ·Π΄Π°Π΅Ρ ΡΠ°ΠΉΠ»Ρ
corecore$ <b>gdb ch15-badmem1 core.28005</b> /* ΠΡ ΠΎΠΏΡΠΈΠΈ -b */GNU gdb 5.3...Core was generated by 'ch15-badmem1 -b'.Program terminated with signal 11, Segmentation fault....#0 0x08048466 in main (argc=2, argv=0xbffff8c4) at ch15-badmem1.c:1818 p[42] = 'a'; /* touch outside the bounds */(gdb) <b>quit</b>$ <b>gdb ch15-badmem1 core.28007</b> /* ΠΡ ΠΎΠΏΡΠΈΠΈ -f */GNU gdb 5.3...Core was generated by 'ch15-badmem1 -f'.Program terminated with signal 11, Segmentation fault....#0 0x08048498 in main (argc=2, argv=0xbffff8c4) at ch15-badmem1.Ρ:2121 p[0] = 'b';Π‘ΠΏΡΠ°Π²ΠΎΡΠ½Π°Ρ ΡΡΡΠ°Π½ΠΈΡΠ° efence(3) ΠΎΠΏΠΈΡΡΠ²Π°Π΅Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Ρ, ΡΡΠΎΠ±Ρ Π½Π°ΡΡΡΠΎΠΈΡΡ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Electric Fence. Π‘Π»Π΅Π΄ΡΡΡΠΈΠ΅ ΡΡΠΈ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΏΡΠΈΠΌΠ΅ΡΠ°ΡΠ΅Π»ΡΠ½Ρ.
EF_PROTECT_BELOWΠ£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΡΡΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π² 1 Π·Π°ΡΡΠ°Π²Π»ΡΠ΅Ρ Electric Fence ΠΏΡΠΎΠ²Π΅ΡΡΡΡ Β«Π½Π΅Π΄ΠΎΠ±ΠΎΡΡΒ» (underruns) Π²ΠΌΠ΅ΡΡΠΎ Β«ΠΏΠ΅ΡΠ΅Π±ΠΎΡΠΎΠ²Β» (overruns) ΠΏΡΠΈ Π²ΡΡ ΠΎΠ΄Π΅ Π·Π° ΠΏΡΠ΅Π΄Π΅Π»Ρ ΠΎΡΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ. Β«ΠΠ΅ΡΠ΅Π±ΠΎΡΒ», Ρ.Π΅. Π΄ΠΎΡΡΡΠΏ ΠΊ ΠΏΠ°ΠΌΡΡΠΈ Π² ΠΎΠ±Π»Π°ΡΡΠΈ Π·Π° Π²ΡΠ΄Π΅Π»Π΅Π½Π½ΠΎΠΉ, Π±ΡΠ» ΠΏΡΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΠΎΠ²Π°Π½ ΡΠ°Π½Π΅Π΅. Β«ΠΠ΅Π΄ΠΎΠ±ΠΎΡΒ» ΡΠ²Π»ΡΠ΅ΡΡΡ Π΄ΠΎΡΡΡΠΏΠΎΠΌ ΠΊ ΠΏΠ°ΠΌΡΡΠΈ, ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½Π½ΠΎΠΉ ΠΏΠ΅ΡΠ΅Π΄ Π²ΡΠ΄Π΅Π»Π΅Π½Π½ΠΎΠΉ ΠΎΠ±Π»Π°ΡΡΡΡ ΠΏΠ°ΠΌΡΡΠΈ.
EF_PROTECT_FREEΠ£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΡΡΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π² 1 ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠ°Π΅Ρ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Electric Fence ΠΏΠ°ΠΌΡΡΠΈ, ΠΊΠΎΡΠΎΡΠ°Ρ Π±ΡΠ»Π° ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π΅Π½Π°. ΠΡΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ, ΠΊΠΎΠ³Π΄Π° Π²Ρ Π΄ΡΠΌΠ°Π΅ΡΠ΅, ΡΡΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠ»ΡΡΠ°ΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π΅Π½Π½ΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ; Π΅ΡΠ»ΠΈ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π΅Π½Π½Π°Ρ ΠΏΠ°ΠΌΡΡΡ Π²ΠΏΠΎΡΠ»Π΅Π΄ΡΡΠ²ΠΈΠΈ Π±ΡΠ»Π° Π²ΡΠ΄Π΅Π»Π΅Π½Π° Π·Π°Π½ΠΎΠ²ΠΎ, Π΄ΠΎΡΡΡΠΏ ΠΊ Π½Π΅ΠΉ ΡΠ΅ΡΠ΅Π· ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΠΉ Π²ΠΈΡΡΡΠΈΠΉ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ ΠΎΡΡΠ°Π»ΡΡ Π±Ρ Π² ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π½Π΅Π·Π°ΠΌΠ΅ΡΠ΅Π½Π½ΡΠΌ.
EF_ALLOW_MALLOC_0ΠΡΠΈ Π½Π°Π»ΠΈΡΠΈΠΈ Π½Π΅Π½ΡΠ»Π΅Π²ΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Electric Fence Π΄ΠΎΠΏΡΡΠΊΠ°Π΅Ρ Π²ΡΠ·ΠΎΠ²Ρ '
malloc(0)ΠΠ΄ΠΎΠ±Π°Π²ΠΎΠΊ ΠΊ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ Electric Fence ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ Ρ ΡΠ°ΠΊΠΈΠΌΠΈ ΠΆΠ΅ Π½Π°Π·Π²Π°Π½ΠΈΡΠΌΠΈ. ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΈΠ· ΠΎΡΠ»Π°Π΄ΡΠΈΠΊΠ°, ΡΠ°ΠΊ ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠΆΠ΅ Π½Π°ΡΠ°Π»Π° Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅. ΠΠΎΠ΄ΡΠΎΠ±Π½ΠΎΡΡΠΈ ΡΠΌ. Π² efence(3).
15.5.2.3. ΠΡΠ»Π°Π΄ΠΊΠ° Malloc:
dmallocΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°
dmallocΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°
dmallocDMALLOC_OPTIONS$ <b>echo $DMALLOC_OPTIONS</b>debug=0x4e40503,inter=100,log=dm-logΠΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ '
debugΠΠ΅ΡΠ²ΡΠΉ ΡΠ°Π³ Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠΈ Ρ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ
dmallocdmalloc$ <b>dmalloc() {</b>> <b>eval 'command dmalloc -b $*'</b> /* ΠΠΎΠΌΠ°Π½Π΄Π° 'command' ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠΈ */> <b>}</b>ΠΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΡΡΠΎ ΡΠ΄Π΅Π»Π°Π½ΠΎ, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΎΠΏΡΠΈΠΈ Π΄Π»Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΡΠ°ΠΉΠ»Π° ΠΆΡΡΠ½Π°Π»Π° (-1), ΡΠΊΠ°Π·Π°ΡΡ ΡΠΈΡΠ»ΠΎ ΠΈΡΠ΅ΡΠ°ΡΠΈΠΉ, ΠΏΠΎΡΠ»Π΅ ΠΊΠΎΡΠΎΡΡΡ
dmalloclow$ <b>dmalloc -1 dm-log -i 100 low</b>ΠΠ°ΠΊ ΠΈ Electric Fence, Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°
dmallocLD_PRELOAD$ <b>LD_PRELOAD=libdmalloc.so ch15-badmem1 -b</b> /* ΠΠ°ΠΏΡΡΡΠΈΡΡ Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΎΠΉ */p = <not 30 bytes> /* ΠΠΎΠΊΠ°Π·Π°Π½ Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΡΠΉ Π²ΡΠ²ΠΎΠ΄ */ΠΠΠΠΠ§ΠΠΠΠ. ΠΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ '
export LD_PRELOAD=libdmalloc.solsmalloc()unset LD_PRELOAD