2011-12-19 2 views
0

Я помню, как давно читал, что если я хочу проверить переполнение буфера на моем ящике Linux, мне нужно установить что-то в системе, чтобы это произошло. Я не помню, для чего это было, но я надеялся, что кто-то знает, о чем я говорю.настройка системы для переполнения буфера для программы

Я хочу проверить свои программы на наличие уязвимостей и посмотреть, не перезаписаны ли регистры.

EDIT: Я бегу Ubuntu 10,04

+2

valgrind, может быть? – fge

+0

Кажется, вы просите две вещи: «переполнение буфера» и «регистрация перезаписываемых». Можете ли вы быть более осторожным в своей терминологии? – dmckee

+0

Вы настаиваете на решении на основе ubuntu? –

ответ

3

Один из вариантов заключается в использовании отладчика памяти, такие как Valgrind. Обратите внимание, однако, что Valgrind отслеживает только переполнение буфера в динамически распределенной памяти.

Если у вас есть возможность использовать C++ вместо C, вы можете переключиться на использование контейнеров, а не на необработанные массивы, и использовать режим «проверенного контейнера» GCC (см. GCC STL bound checking). Я уверен, что другие компиляторы предлагают похожие инструменты.

+0

+1 для '-D_GLIBCXX_DEBUG' –

0

Еще один намек (в дополнение к Oli's answer), при сбое ошибок памяти с помощью отладчика gdb, заключается в отключении address space layout randomization, например.

echo 0 > /proc/sys/kernel/randomize_va_space 

После выполнения этих два последовательных пробеги одного и той же детерминированной программы будет обычно mmap регионы на один и те же адреса (от одного прогона к другому), и это помогает отлаживать много с gdb (потому что тогда malloc обычно дает тот же результат от одного прогона к другому, в том же заданном месте в пробеге).

Вы также можете использовать команду watchgdb. В частности, если в первом период (с ASLR инвалидов) вы поймете, что расположение 0x123456 это unexepectedly меняется, вы могли бы дать gdb следующую команду во втором периоде:

watch * (void**) 0x123456 

Тогда gdb сломается, когда это изменение местоположения (к сожалению, он должен быть уже mmap).

Смежные вопросы