Краткое описание технологий, используемых в инструменте PVS-Studio, которые позволяют эффективно обнаруживать большое количество паттернов ошибок и потенциальных уязвимостей. Статья описывает реализацию анализатора для С и C++ кода, однако приведённая информация справедлива и для модулей, отвечающих за анализ C# и Java кода.
Читать полностью »
Рубрика «статический анализ» - 3
Технологии, используемые в анализаторе кода PVS-Studio для поиска ошибок и потенциальных уязвимостей
2018-11-21 в 8:28, admin, рубрики: C, c/c++, C#, c++, Data-Flow Analysis, java, Method Annotations, pattern-based analysis, pvs-studio, Symbolic Execution, Анализ потока данных, Аннотирование методов, Блог компании PVS-Studio, информационная безопасность, Компиляторы, Программирование, Си, Символьное выполнение, Сопоставление с шаблоном, статический анализ, статический анализ кода23 рекомендации для читабельного кода
2018-09-18 в 20:40, admin, рубрики: doxygen, entity component system, solid, tdd, антипаттерны, лаконичность, Программирование, статический анализ, Тестирование IT-систем, управление разработкой, читабельность, читабельный код, шаблон проектирования
Чужой код не всегда понятен. Несколько часов уходит на решение проблем, которые можно исправить за пару минут. В этой статье рассмотрим советы, как писать понятный код, который легко поддерживать.
Обратите внимание, что это не руководство по написанию «чистого кода». Под этим термином понимают разные вещи. Кому-то нравится легко расширяемый и общий код, кто-то предпочитает абстрагировать реализацию и работать только с конфигами, а некоторые просто любят субъективно красивый код. Это руководство фокусируется на читабельности, то есть на максимально эффективной передаче необходимой информации другим программистам.
Читать полностью »
Выпуск Rust 1.29
2018-09-14 в 5:16, admin, рубрики: cargo, clippy, open source, Rust, выпуск, Компиляторы, Программирование, релиз, системное программирование, статический анализКоманда разработчиков Rust рада сообщить о выпуске новой версии Rust: 1.29.0. Rust — это системный язык программирования, нацеленный на безопасность, скорость и параллельное выполнение кода.
Если у вас установлена предыдущая версия Rust с помощью Rustup, то для обновления Rust до версии 1.29.0 вам достаточно выполнить:
$ rustup update stable
Если у вас еще не установлен Rustup, вы можете установить его с соответствующей страницы нашего веб-сайта. С подробными примечаниями к выпуску Rust 1.29.0 можно ознакомиться на GitHub.
Что вошло в стабильную версию 1.29.0
1.29 привносит не очень много изменений. Ожидается что Rust 1.30 и 1.31 будут очень значительными, так что большая часть 1.29 итерации ушла на подготовку к будущим изменениям. Два самых заметных нововведения этого выпуска даже не касаются самого языка: это две новые возможности Cargo и обе они касаются предупреждений.
cargo fix
автоматически исправляет предупреждения в кодеcargo clippy
— статический анализатор Rust кода, помогающий поймать распространенные ошибки и просто улучшить код
cargo fix
С выпуском Rust 1.29 у Cargo появляется новая подкоманда: cargo fix
. Если вы когда-либо писали на Rust, то скорее всего уже сталкивались с предупреждениями компилятора. Например, рассмотрим такой код:
fn do_something() {}
fn main() {
for i in 0..100 {
do_something();
}
}
В нем мы вызываем do_something
сто раз, но никогда не используем переменную i
. Rust предупреждает нас об этом:
Анализ унаследованного кода, когда исходный код утрачен: делать или не делать?
2018-07-02 в 9:09, admin, рубрики: анализ кода, бинарный анализ, Блог компании Ростелеком-Solar, Компиляторы, Программирование, статический анализ, унаследованный кодАнализ бинарного кода, то есть кода, который выполняется непосредственно машиной, – нетривиальная задача. В большинстве случаев, если надо проанализировать бинарный код, его восстанавливают сначала посредством дизассемблирования, а потом декомпиляции в некоторое высокоуровневое представление, а дальше уже анализируют то, что получилось.
Здесь надо сказать, что код, который восстановили, по текстовому представлению имеет мало общего с тем кодом, который был изначально написан программистом и скомпилирован в исполняемый файл. Восстановить точно бинарный файл, полученный от компилируемых языков программирования типа C/C++, Fortran, нельзя, так как это алгоритмически неформализованная задача. В процессе преобразования исходного кода, который написал программист, в программу, которую выполняет машина, компилятор выполняет необратимые преобразования.
В 90-е годы прошлого века было распространено суждение о том, что компилятор как мясорубка перемалывает исходную программу, и задача восстановить ее схожа с задачей восстановления барана из сосиски.
Читать полностью »
Разработка нового статического анализатора: PVS-Studio Java
2018-06-20 в 11:18, admin, рубрики: c++, java, pvs-studio, Блог компании PVS-Studio, Программирование, статический анализСтатический анализатор PVS-Studio известен в мире C, C++ и C# как инструмент для выявления ошибок и потенциальных уязвимостей. Однако у нас мало клиентов из финансового сектора, так как выяснилось, что сейчас там востребованы Java и IBM RPG(!). Нам же всегда хотелось стать ближе к миру Enterprise, поэтому, после некоторых раздумий, мы приняли решение заняться созданием Java анализатора.
Читать полностью »
Проверка исходного кода свободного графического редактора Krita 4.0
2018-04-23 в 12:39, admin, рубрики: c++, krita, open source, pvs-studio, Блог компании PVS-Studio, графические редакторы, графический дизайн, С++, статический анализНе так давно состоялся релиз новой версии свободного графического редактора Krita 4.0. Самое время проверить этот проект с помощью PVS-Studio.
Как VPN-клиенты под Android шпионят за пользователями
2017-01-26 в 10:50, admin, рубрики: android, Android VPN Service, BIND_VPN_SERVICE, ICSI Netalyzr, vpn, информационная безопасность, смартфоны, Софт, статический анализ
Тестирование VPN-клиентов проверило три возможных режима перехвата и перенаправления трафика через VPN-клиент: локальный перехват (1); перенаправление в облако через VPN-сервер (2); пиринговый форвардинг через узел, участвующий в системе (3). Сниффинг и анализ трафика производился сниффером ICSI Netalyzr через настроенную точку доступа WiFi
С выходом Android 4.0 в октябре 2011 года разработчики мобильных приложений получили нативную поддержку для встроенных VPN-клиентов через класс Android VPN Service
. В отличие от десктопных операционных систем, где приложению требуется рутовый доступ для создания виртуальных интерфейсов, под Android достаточно всего лишь запросить разрешение BIND_VPN_SERVICE
для создания VPN-клиента.
Читать полностью »
Как PVS-Studio ищет ошибки: методики и технологии
2017-01-12 в 11:31, admin, рубрики: C, C#, c++, pvs-studio, Блог компании PVS-Studio, информационная безопасность, Компиляторы, разработка программного обеспечения, Си, статический анализ, статический анализ кода, статический анализатор кодаPVS-Studio — статический анализатор исходного кода для поиска ошибок и уязвимостей в программах на языке C, C++ и C#. В этой статье я хочу дать обзор технологий, которые мы используем в анализаторе PVS-Studio для выявления ошибок в коде программ. Помимо общей теоретической информации я буду на практических примерах показывать, как та или иная технология позволяет выявлять ошибки.
Введение
Поводом для написания статьи стало моё выступление с докладом на открытой конференции ИСП РАН 2016 (ISPRAS OPEN 2016), проходившей в первых числах декабря в Главном здании Российской академии наук. Тема доклада: «Принципы работы статического анализатора кода PVS-Studio» (презентация в формате pptx).
К сожалению, время выступления было сильно ограничено, поэтому мне пришлось подготовить весьма короткую презентацию и не рассказать в докладе многое из того, что хотелось. Поэтому я решил написать эту статью, где более подробно расскажу о том, какие подходы и алгоритмы мы используем при разработке проекта PVS-Studio.
Читать полностью »
Статический анализатор HuntBugs: проверяем IntelliJ IDEA
2016-05-25 в 6:18, admin, рубрики: huntbugs, intellij idea, java, kotlin, статический анализКак многие помнят, некоторое время я развивал статический анализатор Java-байткода FindBugs. Однако проблем в FindBugs накопилось столько, что я решил, что будет проще написать новый анализатор байткода. Я не очень творчески назвал его HuntBugs. Разработка ведётся на GitHub. Он пока в ранней стадии разработки, иногда глючит и покрывает примерно 35% диагностик из FindBugs, но при этом добавляет свои интересные штуки. Попробовать можно на вашем Maven-проекте с помощью команды mvn one.util:huntbugs-maven-plugin:huntbugs
(отчёт пишется в target/huntbugs/report.html
). Альтернативно можно собрать вручную из гита и запустить приложение командной строки one.util.huntbugs.HuntBugs
, которому можно подавать на вход JAR-файлы или каталоги с .class-файлами.
Как-нибудь потом, когда проект несколько повзрослеет, я расскажу о нём более подробно. А в этой статье я покажу, чего интересного нашёл HuntBugs в IntelliJ IDEA Community Edition. Я скачал с официального сайта и поставил последнюю версию этой IDE, а затем натравил HuntBugs на файл lib/idea.jar
, в котором почти всё и лежит. Я люблю тестировать статический анализ на IDEA, потому что это IDE, в которой самой есть очень неплохой статический анализатор и разработчики им явно пользуются. Интересно посмотреть, что остаётся после него.
Flow — статический анализ типов в JS от Facebook
2014-11-20 в 7:48, admin, рубрики: Facebook, javascript, TypeScript, Веб-разработка, статический анализ, утиная типизацияFlow — это статический анализатор кода и набор синтаксических конструкций, для прямого указания типа переменной. В отличии от TypeScript, есть возможность делать код типизированным постепенно. Фактически можно взять любой проект на js и сразу начать использовать Flow (аналогично LESS для CSS).
Есть 3 режима:
- Не проверять ничего, по умолчанию
- Проверка без использования аннотаций (с коментарием-аннотацией, как в React)
- Строгое указание типа переменной (с внесением изменения непосредственно в код)