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

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Linux ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ…Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 239

Автор Роббинс ΠΡ€Π½ΠΎΠ»ΡŒΠ΄

$ <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 &lt;[email protected]&gt;

p = &lt;not 30 bytes&gt;

/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 &lt;[email protected]&gt;

p = &lt;not 30 bytes&gt;

/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.28007

GNU/Linux создаСт Ρ„Π°ΠΉΠ»Ρ‹

core
, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ Π² своС имя ID процСсса. Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ ΠΎΡ‚Π»Π°ΠΆΠΈΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ„Π°ΠΉΠ»
core
:

$ <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:18

18 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.с:21

21 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 ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΈΡ… Π·Π°ΠΏΡ€Π΅Ρ‰Π°Π΅Ρ‚.

Π’Π΄ΠΎΠ±Π°Π²ΠΎΠΊ ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ окруТСния Electric Fence прСдоставляСт Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ с Ρ‚Π°ΠΊΠΈΠΌΠΈ ΠΆΠ΅ названиями. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΈΡ… значСния ΠΈΠ· ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠ°, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ динамичСски ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, которая ΡƒΠΆΠ΅ Π½Π°Ρ‡Π°Π»Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅. ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΡΡ‚ΠΈ см. Π² efence(3).

15.5.2.3. ΠžΡ‚Π»Π°Π΄ΠΊΠ° Malloc:

dmalloc

Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°

dmalloc
прСдоставляСт большоС число ΠΎΠΏΡ†ΠΈΠΉ ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ. Π•Π΅ Π°Π²Ρ‚ΠΎΡ€ΠΎΠΌ являСтся Π“Ρ€Π΅ΠΉ Ватсон (Gray Watson), Π΅ΡΡ‚ΡŒ Ρ‚Π°ΠΊΠΆΠ΅ ΠΈ свой Π²Π΅Π±-сайт. [180] Как ΠΈ Π² случаС с Electric Fence, ΠΎΠ½Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΡƒΠΆΠ΅ установлСнной Π½Π° вашСй систСмС, ΠΈΠ»ΠΈ ΠΆΠ΅ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΅Π΅ ΠΈΠ·Π²Π»Π΅Ρ‡ΡŒ ΠΈ ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ.

Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°

dmalloc
провСряСт Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ окруТСния
DMALLOC_OPTIONS
ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰Π΅ΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ. НапримСр, ΠΎΠ½Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

$ <b>echo $DMALLOC_OPTIONS</b>

debug=0x4e40503,inter=100,log=dm-log

ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ '

debug
' этой ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ содСрТит Π½Π°Π±ΠΎΡ€ Π±ΠΈΡ‚ΠΎΠ²Ρ‹Ρ… Ρ„Π»Π°Π³ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ для Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° людСй ΠΏΠΎΡ‡Ρ‚ΠΈ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ нСпосрСдствСнно ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ докумСнтация описываСт двухэтапный процСсс для облСгчСния ΠΈΡ… использования.

ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ шаг Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ с Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ

dmalloc
, которая Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°
dmalloc
:

$ <b>dmalloc() {</b>

&gt; <b>eval 'command dmalloc -b $*'</b> /* Команда 'command' ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΡ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ */

&gt; <b>}</b>

ПослС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ это сдСлано, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΠΏΡ†ΠΈΠΈ для установки Ρ„Π°ΠΉΠ»Π° ΠΆΡƒΡ€Π½Π°Π»Π° (-1), ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ число ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΉ, послС ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ…

dmalloc
Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ свои Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠ΅ структуры Π΄Π°Π½Π½Ρ‹Ρ… (-1), ΠΈ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠΉ тэг ('
low
').

$ <b>dmalloc -1 dm-log -i 100 low</b>

Как ΠΈ Electric Fence, Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°

dmalloc
ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ скомпонована с ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ статичСски ΠΈΠ»ΠΈ связана динамичСски ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ
LD_PRELOAD
. ПослСднСС дСмонстрируСт ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

$ <b>LD_PRELOAD=libdmalloc.so ch15-badmem1 -b</b> /* Π—Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ с ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΎΠΉ */

p = &lt;not 30 bytes&gt; /* Показан Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π²Ρ‹Π²ΠΎΠ΄ */

Π—ΠΠœΠ•Π§ΠΠΠ˜Π•. НС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ '

export LD_PRELOAD=libdmalloc.so
'! Если Π²Ρ‹ это сдСлаСтС, каТдая ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π²Ρ‹ запуститС, такая ΠΊΠ°ΠΊ
ls
, Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ со Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΎΠΉ
malloc()
. Π’Π°ΡˆΠ° систСма быстро станСт Π½Π΅ΠΏΡ€ΠΈΠ³ΠΎΠ΄Π½ΠΎΠΉ. Если Π²Ρ‹ сдСлали это случайно, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ '
unset LD_PRELOAD
', Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²ΠΎΡΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅.