13.07.2015 Views

НА БАГАХ В CHROME - Xakep Online

НА БАГАХ В CHROME - Xakep Online

НА БАГАХ В CHROME - Xakep Online

SHOW MORE
SHOW LESS
  • No tags were found...

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

КОДИНГОтчет, созданный scan-buildция вызывает другую функцию несколько раз, то будут напечатанывсе вызовы), но для ознакомительных целей сойдет.Проверим работу скрипта на файле workandsolve.cc:int work(int data);int solve(int data);int work(int data) {int res = solve(data);return res;}int solve(int data) {int res = work(data);return res;}int main() {solve(10);return 0;}Запускаем Dehydra:g++ -fplugin=~/dehydra/gcc_dehydra.so -fplugin-arg-gcc_\dehydra-script=callgraph.js workandsolve.cc -o /dev/nullПолучаем на выходе:work(int):solve(int)solve(int):work(int)main():solve(int)work(int)Полное описание функций-хендлеров и их параметров, а такжепримеры использования можно найти на странице проекта: mzl.la/DWbf4.Dehydra «из коробки» умеет достаточно мало. Она в основномпредназначена для написания собственных процедур проверки.В репозитории mozilla-central (bit.ly/vJEl1B) лежит несколько готовыхскриптов, использовавшихся для проверки кода программ от Mozilla,но они не очень интересные, так как требуют дополнительной аннотациикода. Например, скрипт final.js проверяет, нет ли наследникову класса, помеченного пользовательским атрибутом final.В общем, это очень интересный инструмент, но он требует дополнительногопрограммирования.Поисковая строка DXRCLANG STATIC ANALYZERClang — это компилятор C/C++/Objective-C, который являются частьюпроекта LLVM(llvm.org). В Сlang встроен статический анализатор, длязапуска которого нужно передать утилите clang (или clang++) опцию--analyze. На его сайте (bit.ly/11xRuQ) опубликован список проверок,которые выполняются в ходе анализа. Проверки разделены на несколькогрупп: core, deadcode, osx, unix. Примерно половина приходитсяна core — сюда входят проверки на наличие базовых ошибок, вомногом схожие с предупреждениями в GCC:• деление на ноль;• разыменование нулевого указателя;• использование неинициализированных переменных в различныхситуациях;• проверки, специфичные для Objective-C.Другая большая группа — osx, где собраны проверки для Mac OS X.Вообще, видно, что именно эта среда является целевой для разработчиковclang static analyzer. Рассмотрим работу clang analyzer на примере.Пусть у нас есть код clantest.c:#include int div_by_zero() {int x = 0;int y = 5 / x;return y;}int null_dereference() {int x = 0;int* p = NULL;if (x > 0)p = &x;return *p;}int main() {return 0;}Компилируем и одновременно проверяем код:clang --analyze clangtest.c -o clangtestПолучаем на выходе:clangtest.c:5:13: warning: Division by zeroint y = 5 / x;^090ХАКЕР 02 /157/ 2012

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!