|
|
ru.linux- RU.LINUX --------------------------------------------------------------------- From : Aleksey Cheusov 2:5020/400 03 Apr 2003 13:22:22 To : Valentin Nechayev Subject : Re: Norton Guide -------------------------------------------------------------------------------- Valentin Nechayev <netch@segfault.kiev.ua> writes: > AC> И понял то, например, что > AC> попорченный стек не отлавливается ни efence-ом ни valgrind-ом - > AC> ничем. > > Мнэээ. А кто мешает отлавливать? Вот есть такая вещь как > libparanoia. (Только под FreeBSD, но всё же. И спортировать её > легко.) Это комплект реализаций традиционно наиболее опасных функций > - gets, strcpy, strcat и прочая - которые на входе сохраняют > указатели цепочки нескольких ближайших стековых фреймов, а на выходе > - проверяют, и если цепочка нарушена - вышибают программу нахер. Если это там о сохранности [ebp+4] (ну или где-то рядом), то маловато как то. Я имею ввиду corruption +/- один байт. К тому же функций то всего strcpy, strcat, gets, sprintf, scanf Кто ж их сейчас использует? Есть же strncpy, strncat, snprintf. В scanf-е есть %20s А gets я бы вообще запретил использовать. Из за него всякие sed-ы да mawk-и обламывают длинные строки на входе. Дурдом. > Хрен с efence, но valgrind при всех своих возможностях вполне мог бы > ловить вход в функции и выход из них и отслеживать цепочку фреймов > при этом. Hичего тебе valgrind не даст. За адресом возврата отследить может, да. А в общем случае, что тебе даст sub $0x3c,%esp или xor %eax,%eax push %eax push %eax push %eax если я массив заливаю нулями? Hичего. Так что valgrind тоже в пролёте. Можно, конечно, с разработчиками gcc договориться, чтобы хрень какую-нибудь вставили при опции --special-for-valgrind. Hо по большому то счёту GCC-шники могут и malloc/free захардкодить и обойтись без valgrind. А вот на ублюдочном псевдо- недо- язычке, хуже которого только Java, для дебилов, имбицилов, придурков, необразованного быдла и прочего материала для биофабрики, лучше которого даже Форт-очники и который так любят Вагнер и Луговский, я бы сделал так: #ifdef PARANOIA_DEBUG #include <vector> # define declare(type, name, size) \ std::vector <type> name##_paranoid; \ name##_paranoia.resize (size); \ type * const name = name##_paranoia.begin (); #else # define declare(type, name, size) \ type name [size]; #endif declare(int, my_array, 2000) и с помощью efence решил бы проблему "общения" с массивами раз и навсегда на 100%, а не только с пятью функциями, которые я лично и не использую и никому не советую. Да в жертву приносятся size(), ={1,2,3}, ухудшается наглядность немножко. Hо, мне кажется, разработчиков sshd, apache, samba и прочих squid-ов и sendmail-ов нагшлядность волнует в меньшей степени, чем вышеупомянутых товарищей. Hо они на этом ублюдочном недоязычке не пишут. Увы. -- Best regards, Aleksey Cheusov. --- ifmail v.2.15dev5 * Origin: Science Soft (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.linux/1728395c9faa5.html, оценка из 5, голосов 10
|