зависит от цели что нужно изучить, сначала можно гуглить, если тема обширная как ООП или паттерны проектирования - книги, если связанное с кибер безом - hack the box (платный ) или portswigger (бесплатный )сайты, ютуб тоже помогает местами, а так учеба по методу колба, можешь по гуглить про него, пару часов в день иногда больше иногда меньше, главное каждый день, с паузами и комбинировать активности
@@просточеловек-я3ъ я это делаю потому что лично сам испытываю к этому интерес, ну и если посмотришь мой контент, мне нужен был легенький ролик разбавить курс по sqlmap, ну и просто люблю разные уезвимости мне интересно как они работают и все такое, и может вдруг кому то тоже поэтому почему бы и нет :)
и дополню, компилятор поможет но не всегда! это оч популярная уязвимость и о ней говорят не просто так, ее допускают часто ) я рассмотрел оч basic случии там конечно просто
Установите Xcode из App Store или через команду xcode-select --install в терминале. и юзай clang -fsanitize=address -g -o my_program my_program.c для компиляции
это не глупый вопрос! Это распространённое недоразумение. В C функция free() освобождает память, на которую указывает указатель, но не изменяет сам указатель. Это происходит по следующим причинам: 1) Сохранение значения указателя: Если free() автоматически присваивала бы NULL освобожденному указателю, это могло бы привести к путанице, особенно если указатель используется в нескольких местах кода. Программисты часто хотят знать, что указатель указывает на освобождённую память. потом еще 2) Указатель остаётся валидным: После вызова free() указатель всё ещё существует и может быть использован (но не следует его разыменовывать, так как память уже освобождена). Изменение указателя на NULL сделало бы невозможным использование его в дальнейшем, если это необходимо. и последние но не мало важное это управление памятью: В C программист сам отвечает за управление памятью. Если вам нужно обнулить указатель после вызова free(), это нужно сделать вручную, чтобы избежать проблем с висячими указателями (dangling pointers).
@@findme5513всë куда проще: в функцию free() мы передаем копию объекта, содержащего указатель. Если бы надо было присваивать объекту NULL, функция free() должна была бы выглядеть так: free(void**)
я python разработчик, меня просто попросили сделать обзор на эту vuln, так что пишу на том на чем можно это покозать :) но всеравно спасибо что обьеснил !
пушка бро ! очень классное видео!
Думал, речь будет про запись нулями (memset) перед освобождением, а тут вон как всё просто :)
Ниче не понял, но спасибо ютубу за рекомендации
@@ЦвмфвафваВфвафвсфв да это немного не простые темы :), но я уверен со временем ты поймешь
@ да суть уязвимости понятна, не понятно зачем это ютуб мне рекомендует. Я вообще на свифте пишу😂
Спасибо за ролик 👍
42 БРАТУХА
Бло эщкерембус, скажи каким образом ты учишься через книги или как, и скок часов в день?
зависит от цели что нужно изучить, сначала можно гуглить, если тема обширная как ООП или паттерны проектирования - книги, если связанное с кибер безом - hack the box (платный ) или portswigger (бесплатный )сайты, ютуб тоже помогает местами, а так учеба по методу колба, можешь по гуглить про него, пару часов в день иногда больше иногда меньше, главное каждый день, с паузами и комбинировать активности
В чем прикол объяснять уязвимость если современные компиляторы всё равно её детектят? (не в обиду автору, спасибо за ролик :D )
Хотя ладно, от части я понимаю, это как объяснять паттерны, не все знают как они устроены, но все знают о их существовании (я джавист, лол)
@@просточеловек-я3ъ я это делаю потому что лично сам испытываю к этому интерес, ну и если посмотришь мой контент, мне нужен был легенький ролик разбавить курс по sqlmap, ну и просто люблю разные уезвимости мне интересно как они работают и все такое, и может вдруг кому то тоже поэтому почему бы и нет :)
и дополню, компилятор поможет но не всегда! это оч популярная уязвимость и о ней говорят не просто так, ее допускают часто ) я рассмотрел оч basic случии там конечно просто
Как asan использовать под маком? Или хоть какие-то аналоги
Установите Xcode из App Store или через команду xcode-select --install в терминале. и юзай clang -fsanitize=address -g -o my_program my_program.c
для компиляции
глупый вопрос от глупого человека: почему free(ptr*) не делает ptr=NULL автоматически
это не глупый вопрос! Это распространённое недоразумение. В C функция free() освобождает память, на которую указывает указатель, но не изменяет сам указатель. Это происходит по следующим причинам: 1) Сохранение значения указателя: Если free() автоматически присваивала бы NULL освобожденному указателю, это могло бы привести к путанице, особенно если указатель используется в нескольких местах кода. Программисты часто хотят знать, что указатель указывает на освобождённую память.
потом еще 2) Указатель остаётся валидным: После вызова free() указатель всё ещё существует и может быть использован (но не следует его разыменовывать, так как память уже освобождена). Изменение указателя на NULL сделало бы невозможным использование его в дальнейшем, если это необходимо.
и последние но не мало важное это управление памятью: В C программист сам отвечает за управление памятью. Если вам нужно обнулить указатель после вызова free(), это нужно сделать вручную, чтобы избежать проблем с висячими указателями (dangling pointers).
короче
#define (nullfree(ptr*);) (free(ptr*); ptr=NULL;)
@@vadimirnov5211 да, в многих случиях это может быть хорошим решением!
Всё сильно проще. Накладные расходы. По этим же причинам [] не смотрит, выходите ли вы за границы массива.
@@findme5513всë куда проще: в функцию free() мы передаем копию объекта, содержащего указатель. Если бы надо было присваивать объекту NULL, функция free() должна была бы выглядеть так: free(void**)
С C++ видео никак не связано. В плюсах давно абстрагировались от того же оператора new за идиомой RAII и std::allocator. Не пишите на Си.
я python разработчик, меня просто попросили сделать обзор на эту vuln, так что пишу на том на чем можно это покозать :) но всеравно спасибо что обьеснил !
@@findme5513стоит ли к python и Go подучить C++?