Обновить
128K+

C++ *

Типизированный язык программирования

233,65
Рейтинг
Сначала показывать
Порог рейтинга
Уровень сложности

Ровные зубы, C++ и математика — как они связаны? Разговор с Align

Время на прочтение12 мин
Охват и читатели16K


Иногда мне кажется, что чем больше я смотрю на ИТ- индустрию, тем примитивнее становится в голове общая картина. Как будто ИТ — это либо серьезный rocket science, либо очередной сервис, который «позволяет сделать *что-нибудь-еще* всего в один клик». А за пределами этого представления все еще остались нетронутые новыми технологиями занятия. Сходить к тому же зубному — ну причем здесь ИТ?

Какое же это заблуждение.

Сегодня дантист назначает лечение, а за его решением может крыться работа нескольких сотен инженеров по всему миру. Программисты, математики, техники, аналитики, спецы по ML, менеджеры, заводы с 3D-принтерами — все ради сверкающих голливудских улыбок.

Зачем столько людей, чем конкретно они заняты, и как математики и знатоки C++ помогают делают зубы ровными, мы поговорили с Align Tech — огромной международной компанией, которая массово производит капы для ортодонтического лечения.
Align Technology Inc. получила на «Моём круге» среднюю оценку 4,5 от своих сотрудников, которые выше всего оценили компанию за интересные задачи, социальный пакет, комфортные условия и за то, что она помогает делать мир лучше!
Читать дальше →

Ломаем простую «крякми» при помощи Ghidra — Часть 2

Время на прочтение12 мин
Охват и читатели20K
В первой части статьи мы при помощи Ghidra провели автоматический анализ простой программы-крякми (которую мы скачали с сайта crackmes.one). Мы разобрались с тем, как переименовывать «непонятные» функции прямо в листинге декомпилятора, а также поняли алгоритм программы «верхнего уровня», т.е. что выполняется функцией main().

В этой части мы, как я и обещал, возьмемся за анализ функции _construct_key(), которая, как мы выяснили, как раз и отвечает за чтение переданного в программу двоичного файла и проверку прочитанных данных.
Читать дальше →

Ломаем простую «крякми» при помощи Ghidra — Часть 1

Время на прочтение9 мин
Охват и читатели146K
О том, что это за зверь такой — Ghidra («Гидра») — и с чем его едят она ест программки, многие уже, наверняка, знают не понаслышке, хотя в открытый доступ сей инструмент попал совсем недавно — в марте этого года. Не буду докучать читателям описанием Гидры, ее функциональности и т.д. Те, кто в теме, уже, уверен, всё это сами изучили, а кто еще не в теме — могут это сделать в любое время, благо на просторах веба сейчас найти подробную информацию не составит труда. Кстати, один из аспектов Гидры (разработку плагинов к ней) уже освещался на Хабре (отличная статья!) Я же дам только основные ссылки:


Итак, Гидра — это бесплатный кроссплатформенный интерактивный дизассемблер и декомпилятор с модульной структурой, с поддержкой почти всех основных архитектур ЦПУ и гибким графическим интерфейсом для работы с дизассемблированным кодом, памятью, восстановленным (декомпилированным) кодом, отладочными символами и многое-многое другое.

Давайте попробуем уже что-нибудь сломать этой Гидрой!
Читать дальше →

Wireshark 3.x: анализ кода под macOS и обзор ошибок

Время на прочтение9 мин
Охват и читатели8.2K

Picture 1

Wireshark Foundation выпустила финальную stable-версию популярного сетевого анализатора трафика — Wireshark 3.0.0. В новом релизе устранено несколько багов, реализована возможность анализа новых протоколов и заменен драйвер WinPcap на Npcap. Здесь заканчивается цитирование анонса и начинается наша заметка о багах в проекте. Перед релизом их было исправлено явно недостаточно. Давайте насобираем исправлений, чтобы был повод делать новый релиз :).

Введение


Wireshark — это достаточно известный инструмент для захвата и анализа сетевого трафика. Программа работает с подавляющим большинством известных протоколов, имеет понятный и логичный графический интерфейс, мощнейшую систему фильтров. Wireshark — кроссплатформенный, работает в таких ОС, как: Windows, Linux, macOS, Solaris, FreeBSD, NetBSD и многих других.

Для поиска ошибок использовался статический анализатор PVS-Studio. Для анализа исходного кода необходимо предварительно скомпилировать проект в какой-нибудь операционной системе. Выбор был большой не только из-за кроссплатформенности проекта, но и из-за кроссплатформенности анализатора. Для анализа проекта я выбрал macOS. Также запуск анализатора возможен в Windows и Linux.

Про качество кода хочется рассказать отдельно. К сожалению, я не могу назвать его хорошим. Это субъективная оценка, но поскольку мы регулярно проверяем множество проектов, у меня есть с чем сравнивать. В данном случае в глаза бросается большое количество предупреждений PVS-Studio на небольшом объёме кода. Суммарно на этот проект выдано более 3500 предупреждений всех уровней. Это характерно для проектов, в которых вообще не используются инструменты статического анализа, даже бесплатные. Другим фактором, указывающим на качество проекта, являются повторяющиеся ошибки, выявленные анализатором. В статье однотипные примеры кода не будут приводиться, но некоторые одинаковые ошибки присутствуют в коде в сотне мест.
Читать дальше →

Работа с командами APDU на примере EToken

Время на прочтение5 мин
Охват и читатели8.5K
"… Путь не так уж сложен для понимания. Силы природы, естественные наклонности, схемы событий…
Примитивное миропонимание замечает только четыре стихии и дальше этого не идёт. Словно вселенная сводится к четырём доступным созерцанию понятным явлениям."
Стивен Эриксон.
«Полночный прилив».


image

Привет, Хабр!

Тема APDU здесь поднималась неоднократно, но в основном касалась смарт карт, для которых нужен карт ридер и карта которую не жалко, плюс софт, так как работать с консольным интерфейсом OpenSC, по крайней мере в Window$, мягко говоря неудобно.
Для этого я написал небольшую программу с оконным интерфесом, работающую через winscard.
Исходники и бинарники можно скачать здесь.
Компилировалось это под Visual studio 2008, необходимо добавить в проект WinSCard.Lib из Microsoft Windows SDK.
Читать дальше →

Асинхронность в программировании

Время на прочтение26 мин
Охват и читатели117K

В области разработки высоконагруженных многопоточных или распределенных приложений часто возникают дискуссии об асинхронном программировании. Сегодня мы подробно погрузимся в асинхронность и изучим, что это такое, когда она возникает, как влияет на код и язык программирования, которым мы пользуемся. Разберемся, зачем нужны Futures и Promises и затронем корутины и операционные системы. Это сделает компромиссы, возникающие во время разработки ПО, более явными.


В основе материала — расшифровка доклада Ивана Пузыревского, преподавателя школы анализа данных Яндекса.


Читать дальше →

Визуализация времени возрождения Рошана

Время на прочтение56 мин
Охват и читатели54K
В данной статье рассматривается перехват функций графического API на примере DirectX 9 под x64 применительно к игре Dota 2.

Будет подробно рассказано, как внедриться в процесс игры, как изменить поток выполнения, приведено краткое описание внедряемой логики. В конце поговорим о других возможностях для отрисовки, которые предоставляет движок.



Disclaimer: Автор не несет ответственности за применение вами знаний полученных в данной статье или ущерб в результате их использования. Вся информация здесь изложена только в познавательных целях. Особенно для компаний разрабатывающих MOBA, чтобы помочь им бороться с читерами. И, естественно, автор статьи ботовод, читер и всегда им был.
Читать дальше →

IBM System i (aka AS/400) — Как мы делали автотесты приложений зеленого экрана

Время на прочтение14 мин
Охват и читатели34K
Привет! Меня зовут Антон Воробьев, я отвечаю в Альфа-Банке за разработку приложений для централизованной банковской системы.

В этом посте я расскажу вам о том, что такое приложения зеленого экрана, зачем они нужны и как мы делали для них автотесты, написав для этого собственное решение, которое позволило нам ускорить автотесты в 11 раз.



Платформа AS/400 (Application System/400) появилась на свет в 1988 году. Первой ОС для данной платформы является OS/400, позже переименованная в i5/OS и еще позже в IBM i. Не так давно она отметила свое тридцатилетие.

Погружаясь в мир разработки под операционной системой IBM i, понимаешь, что это никакой на самом деле не «legacy» в классическом понимании этого слова. Это другая, совершенно иная среда, которая мало схожа с привычными Windows или Unix-системами. Главная задача этой ОС — быть максимально производительной на аппаратуре, с которой работает, а не быть удобной пользователю.

ИМХО, эта ОС может свести с ума от того, насколько привычные подходы к написанию кода на С++ неэффективны на ней (до десятков раз потери CPU), что некоторые демонстрируемые в учебниках антипаттерны являются best-practice эффективного кода, а исходники с датой написания за 1978 год не просто собираются без проблем, но и работают как было спроектировано! Все это заставляет по-новому взглянуть на современные подходы к разработке ПО.
Читать дальше →

Наследование в C++: beginner, intermediate, advanced

Время на прочтение9 мин
Охват и читатели347K

В этой статье наследование описано на трех уровнях: beginner, intermediate и advanced. Expert нет. И ни слова про SOLID. Честно.


Beginner


Что такое наследование?


Наследование является одним из основополагающих принципов ООП. В соответствии с ним, класс может использовать переменные и методы другого класса как свои собственные.


Класс, который наследует данные, называется подклассом (subclass), производным классом (derived class) или дочерним классом (child). Класс, от которого наследуются данные или методы, называется суперклассом (super class), базовым классом (base class) или родительским классом (parent). Термины “родительский” и “дочерний” чрезвычайно полезны для понимания наследования. Как ребенок получает характеристики своих родителей, производный класс получает методы и переменные базового класса.


Наследование полезно, поскольку оно позволяет структурировать и повторно использовать код, что, в свою очередь,

Читать дальше →

CLion 2019.1: ClangFormat, подсветка кода через Clangd, memory view, начальная поддержка микроконтроллеров

Время на прочтение7 мин
Охват и читатели11K
Привет, Хабр!

У команды CLion множество отличных новостей — питерская часть команды вместе с другими коллегами успешно перебралась в новый офис, к нам присоединились новые классные разработчики, а главное, мы буквально на днях выпустили первое большое обновление в этом году, CLion 2019.1!

Работа в новой версии шла сразу по нескольким фронтам:

  • Усовершенствования поддержки языка C++: подсветка кода через Clangd, улучшения рефакторингов Extract и Rename, новая проверка на то, что функцию-член класса можно объявить статической.
  • Больше возможностей в настройках стиля написания кода: интеграция с ClangFormat, поддержка стилей именования переменных в C/C++, поддержка разных стилей для header guards.
  • Новые возможности и улучшения отладчика: просмотр состояния памяти — Memory View — для указателей, просмотр дизассемблированного кода в случае LLDB, ускорение работы пошаговой отладки.
  • CLion для микроконтроллеров, первые шаги.
  • Возможность создавать Build Targets и конфигурации для запуска/отладки в CLion, которые никак не связаны с проектной моделью.
  • Работа с другими языками программирования в строковых литералах в С/С++.
  • Новые визуальные темы и другие платформенные возможности.

CLion 2019.1 release

Подробнее об этих и других нововведениях читайте ниже. А чтобы попробовать новые возможности и улучшения, скачайте бесплатную 30-дневную версию CLion с нашего сайта.
Читать дальше →

Конкурс «Я — эксперт Intel Studio» с суперпризами для разработчиков

Время на прочтение2 мин
Охват и читатели1.9K
Раз или два в год наш блог устраивает акции «Задай вопрос эксперту Intel» — мы готовим статьи, в которых разработчики Intel отвечают на вопросы Хабражителей относительно разработок и технологий компании (скажем, в прошлом году речь шла о беспилотных автомобилях и Deep Learning). Но в 2019 мы решили превзойти себя и предложить читателям блога самим стать экспертами по одному из самых известных программных продуктов Intel. В самом деле, мы точно знаем, что многие из вас постоянно работают с Intel Parallel Studio и прекрасно в ней разбираются. Почему бы не поделиться своим опытом с другими?

Победителей конкурса ждет приз: профессиональная лицензия на Intel Parallel Studio XE 2019 с годом техподдержки. Да-да, та самая, за $1599. Условия — под катом.


Читать дальше →

Как фрагмент CSS разметки сломал C++ компилятор

Время на прочтение3 мин
Охват и читатели14K

Picture 1

В методологии статического анализа применяются разные технологии. Одна из них — препроцессирование файлов непосредственно перед их анализом. Препроцессированные файлы создаёт компилятор, запускаемый в специальном режиме работы. К сожалению, этот режим не очень хорошо тестируется, как показывает наш многолетний опыт разработки статического анализатора кода. В этой заметке приведу пример свеженайденного бага в С++ компиляторе от Microsoft.
Читать дальше →

Какие языки программирования наименее безопасны?

Время на прочтение3 мин
Охват и читатели24K


Обзор от WhiteSource показал, какие из языков программирования имеют наибольшие дыры в безопасности. Победитель антирейтинга — Си. Но это только начало истории.

Технологии в целом нашпигованы ошибками безопасности. На низком уровне это ошибки в железе. Так это было с уязвимостью Intel и ошибками Spectre. Чуть выше — дыры в безопасности языков программирования. И их ну очень много!
Читать дальше →

Ближайшие события

Обзор программы C++ Russia 2019. Что день грядущий нам готовит?

Время на прочтение5 мин
Охват и читатели4.1K

Современный мир C++ серьёзно отличается от того, что был привычен нам во времена C++ 98. Кто-то этим восхищается, кого-то это раздражает, но факт остаётся фактом. Вот какие темы будоражат умы разработчиков сегодня:


  • Современные и новые возможности языка C++
  • Функциональное программирование
  • Метапрограммирование
  • Многопоточность, параллелизм, асинхронность и все-все-все
  • Как жить с имеющимися инструментами

Меньше чем через месяц пройдёт конференция, которая старается ответить на эти вопросы: C++ Russia 2019. Давайте коротко взглянем, как это у неё получится.


Читать дальше →

Искусство парсинга 2 или транслитерация собственной разметки

Время на прочтение39 мин
Охват и читатели7.3K

+БОНУС: взаимное включение классов друг в друга в C++


Привет, Хабр! Эта статья — прямое продолжение статьи Искусство парсинга или DOM собственными руками, где мы разобрали HTML-документ и построили на его основе абстрактное синтаксическое дерево (AST) с доступом к любому элементу через индексацию при помощи лишь стандартной библиотеки C++, проще говоря, научились самостоятельно парсить XML-подобные штуки. Напомню, что процесс парсинга, или синтаксического анализа/разбора состоит из двух этапов: лексического разбора (разбора текста на токены) и построения AST. Если первый мы рассмотрели очень подробно, с примерами и исходниками, то описание второго похоже на пустую куколку бабочки, у которой есть только оболочка, а прекрасное содержимое автор извлёк перед публикацией. На то была причина, для HTML построить дерево действительно просто, нужно всего 4 класса: пустой тег, блок, текстовый узел и корень документа, наследуемый от блока. Сегодня мы оставим такую простоту позади и построим дерево, где свойства элементов, и пустых, и блочных, будут содержаться не в атрибутах тегов, а непосредственно в классах, а для этого классов придётся создать много. Действительно много. Строить будем не из простых известных языков разметки, а создадим свой, с правилами, показанными на изображении под катом. Плюс в конце ещё переведём, или, говоря правильнее, транслитируем документ с предыдущей статьёй, размеченной нашим языком, в HTML, а в качестве бонуса я отвечу начинающим программистам C++ на тривиальный, но труднонаходимый вопрос: как включать классы «друг в друга»?
Читать дальше →

IT Global Meetup #14 Петербург

Время на прочтение2 мин
Охват и читатели3.4K
23 марта 2019 года пройдет четырнадцатый слет IT-сообществ Санкт-Петербурга IT Global Meetup 2019.

Весенний слет петербургских IT-сообществ стартует в субботу! На островках сообществ можно будет ознакомиться с их деятельностью и принять участие в активностях. ITGM — не форум, не конференция. ITGM — встреча, созданная самими сообществами со свободой действий, докладов и активностей.

image
Читать дальше →

Вред макросов для C++ кода

Время на прочтение6 мин
Охват и читатели32K
define

Язык C++ открывает обширные возможности для того, чтобы обходиться без макросов. Так давайте попробуем использовать макросы как можно реже!

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

BEGIN_MESSAGE_MAP(efcDialog, EFCDIALOG_PARENT )
  //{{AFX_MSG_MAP(efcDialog)
  ON_WM_CREATE()
  ON_WM_DESTROY()
  //}}AFX_MSG_MAP
END_MESSAGE_MAP()

Существуют такие макросы, да и ладно. Они действительно были созданы для упрощения программирования.

Я говорю о других макросах, с помощью которых пытаются избежать реализации полноценной функции или стараются сократить размер функции. Рассмотрим несколько мотивов избегать таких макросов.
Читать дальше →

Инкапсуляция в Си++ и Си

Время на прочтение7 мин
Охват и читатели72K


Определение


Инкапсуляция это набор инструментов для управления доступом к данным или методам которые управляют этими данными. С детальным определением термина “инкапсуляция” можно ознакомиться в моей предыдущей публикации на Хабре по этой ссылке. Эта статья сфокусирована на примерах инкапсуляции в Си++ и Си.


Инкапсуляция в Си++


По умолчанию, в классе (class) данные и методы приватные (private); они могут быть прочитаны и изменены только классом к которому принадлежат. Уровень доступа может быть изменен при помощи соответствующих ключевых слов которые предоставляет Си++.


В Си++ доступно несколько спецификаторов, и они изменяют доступ к данным следующим образом:

Читать дальше →

Топ 10 ошибок в C++ проектах за 2018 год

Время на прочтение14 мин
Охват и читатели19K
Вот уже три месяца, как 2018 год позади. Для многих он пролетел почти незаметно, но для нас, разработчиков PVS-Studio, он оказался весьма насыщенным. Мы трудились в поте лица, бесстрашно боролись за продвижение статического анализа в массы и искали новые ошибки в открытых проектах, написанных на языках C, C++, C# и Java. Десять самых интересных из них мы собрали для вас в этой статье!


Стек DOTS: C++ & C#

Время на прочтение8 мин
Охват и читатели13K
image

Это краткое введение в наш новый дата-ориентированный технологический стек (DOTS). Мы поделимся некоторыми инсайтами, помогающими понять, как и почему Unity сегодня стала именно такой, а также расскажем, в каком направлении планируем развиваться. В дальнейшем мы планируем публиковать в блоге Unity новые статьи о DOTS.
Читать дальше →