Как стать автором
Обновить
211.31

C++ *

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

Сначала показывать
Период
Уровень сложности

ChameleonUltra: открытый инструмент для работы с RFID

Уровень сложностиСредний
Время на прочтение6 мин
Количество просмотров6.1K

ChameleonUltra — это аппаратный инструмент с открытым исходным кодом, разработанный глобальным сообществом гиков. Он позволяет эмулировать, клонировать RFID-метки, а также обнаруживать уязвимости в системах. Независимо от того, являетесь ли вы исследователем безопасности, разработчиком или обычным пользователем, желающим создать резервную копию своей пропускной карты, ChameleonUltra станет вашим «цифровым управляющим ключами».

Разработанный сообществом RfidResearchGroup, ChameleonUltra позиционируется как «RFID-лаборатория в кармане». Его ключевые преимущества:

Открытая архитектура и прозрачность

Читать далее

Свой Cheat Engine с нуля! Часть 1 — Получаем список процессов и модули в нем

Уровень сложностиСредний
Время на прочтение5 мин
Количество просмотров2K

Чтобы сформировать понимание, как происходит получение списка процессов, просто заглянем в исходники самого Cheat Engine.

Здесь у нас есть процедура GetProcessList, в которую мы подаем массив строк, в который она запишем нам имена и айди процессов.

Первое, на что обратим внимание - структура, куда записывается информация о процесе, в СЕ она выглядит так

Читать далее

Установка Qt на Windows без регистрации и VPN. Часть 1. VisualStudio Community + Conan.io

Уровень сложностиПростой
Время на прочтение4 мин
Количество просмотров16K

До присоединения Qt Group к санкциям, для установки Qt Framework and Tools было достаточно скачать Qt Online Installer, ввести данные учетной записи и выбрать интересующие компоненты в меню. Ныне приходится выбирать из скольких вариантов установки: прибегнуть к помощи одного из пакетных менеджеров или собрать из исходников. У каждого варианта есть свои плюсы и минусы. В этой статье рассмотрим установку через один из наиболее популярных пакетных менеджеров для с++ Conan.

Целевая операционная система: Windows 10

Шаг 0. Установка компилятора

Скачиваем с официального сайта VisualStudio Community

https://visualstudio.microsoft.com/ru/downloads/

Запускаем инсталлятор, для работы понадобится набор «Разработка классических приложений С++»

Читать далее

Работа с NRF24L01 и STM32F1

Уровень сложностиСредний
Время на прочтение3 мин
Количество просмотров6.5K

Процесс запуска NRF24L01 в связке со STM32F1. Разработка ведется в Arduino IDE. В статье указан код и схемы подключения для того, чтобы можно было повторить проект самому.

Читать далее

Безопасная разработка на С++ без нарушения обратной совместимости с легаси кодом

Уровень сложностиСложный
Время на прочтение3 мин
Количество просмотров4.4K


Проблема безопасной разработки на С++ возникла не вчера, и она достигла таких размеров, что рекомендации использовать более надежные языки программирования, принимаются на самом высоком уровне.


Но даже несмотря на наличие подобных рекомендаций, планы прекратить использовать С++ и перейти любой другой безопасный язык программирования, часто не выдерживают обычных финансовых расчетов. Ведь если отказаться от С++, то что придется делать с миллионами или даже миллиардами строк кода, которые были написаны за несколько предыдущих десятилетий?


К сожалению, и сам С++ не особо стремится стать более "безопасным". Точнее, подобное стремление плохо сочетается с требования к стандарту языка, которые принимаются комитетом по стандартизации С++. Ведь любой стандарт должен обеспечивать обратную совместимость со всем старым легаси кодом, что автоматически сводит на нет любые попытки внедрения какой либо новой лексики на уровне единого стандарта С++.


И в этой ситуации правы те, кто выступает за обязательную поддержку обратной совместимости со старым кодом. Но правы и те, кто считает необходимым добавление новых возможностей для безопасной разработки на С++ хотя бы в новых проектах.


Таким образом, возникают, казалось бы, взаимоисключающие и не разрешимые противоречия:


  • Текущее состояние С++ не может гарантировать безопасную разработку на уровне стандартов языка.
  • Принятие новых стандартов С++ с изменением лексики для безопасной разработки обязательно нарушат обратную совместимость с существующим легаси кодом.
  • Переписывать всю имеющуюся кодовую базу С++ под новую безопасную лексику (если бы такие стандартны были приняты), ничуть не дешевле, чем переписать этот же код на новом модном языке программирования.

Но ключевым моментом в предыдущем абзаце является фраза "казалось бы".

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

Мой опыт в переводе между типами С++ и С#

Уровень сложностиПростой
Время на прочтение3 мин
Количество просмотров1.8K

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

Читать далее

Все секреты многопоточности

Уровень сложностиСредний
Время на прочтение16 мин
Количество просмотров16K

Disclaimer. Данная работа не повлияла на мои взгляды на программирование, но повлекла достаточно радикальные изменения в подходах к проектированию автоматных объектов.  Теперь, если процесс  автономен и/или не предъявляет требований  к синхронизации, он может использовать другие механизмы параллелизма, не переставая при этом быть автоматным по сути. А почему так случилось, что этому предшествовало  и что это за изменения, вы прочтете далее.

Это не самая большая моя статья (так я думал, начиная ее), над которой я работал, пожалуй, дольше и больше, чем над другими. Но это точно первая моя статья, в которой автоматы и ВКПа не будут главной темой. Тема потоков для меня достаточно необычна, т.к. я совсем не фанат многопоточного программирования. Но,  тем не менее, занимаясь параллельным программированием, время от времени возвращаюсь к теме многопоточности. И вот, чтобы добыть какие-то аргументы для критики и одновременно попробовать найти практическое применение потокам, я решил в этот очередной раз более плотно заняться потоками. А что из этого получилось,  читайте далее.

Читать далее

Сила шифрования или как я выявил недостаток работы Defender’а

Уровень сложностиСредний
Время на прочтение6 мин
Количество просмотров3.2K

Внимание! Статья несёт исключительно информативный характер. Подобные действия преследуются по закону!

В наше время цифровая безопасность все более актуальна, поскольку важность защиты конфиденциальной информации и данных не может быть переоценена. Шифрование информации становится все более неотъемлемой частью нашей цифровой жизни, обеспечивая надежную защиту от несанкционированного доступа.

К сожалению, шифрование часто используется не только в хороших, но и плохих целях...

Читать далее

Смотрим как работает RVO C++ в gcc

Уровень сложностиСредний
Время на прочтение4 мин
Количество просмотров4.8K

В данной небольшой статье я предлагаю рассмотреть как работает принцип RVO (return value optimization) в компиляторе gcc. Автор статьи не претендует на уникальность и какую-то новизну. Ориентировано на начинающих и представляет собой больше некую заметку.

Итак, рассмотрим класс и код, его использующий:

Читать далее

Базовый набор для решения задач на LeetCode/Codeforces, ч.2 Ассоциативные Контейнеры C++

Уровень сложностиПростой
Время на прочтение10 мин
Количество просмотров8K

Начиная разбираться в ассоциативных контейнерах нужно обговорить, что вообще такое ассоциативность - если вы в детстве играли в "Ассоциации", то для вас все почти очевидно, ведь для каждого объекта обговариваемого в периоде игры - нужно найти что-то связанное с этим объектом.

Читать далее

Исследуем защиту программ на практике

Уровень сложностиСредний
Время на прочтение4 мин
Количество просмотров4.8K

Два года назад взялся писать программу, что помогает выставлять счета за аренду ковров. Прежде бухгалтер держал текст договоров в Word, расписание в Excel, а три дня каждого месяца убивал на подсчеты. Теперь программа сама рассчитает суммы и загрузит счета в 1С.

Компания такая не одна: защищу программу - продам ключи.

Защита программы - трудное дело. Исследую защитные алгоритмы на практике: вытащу из готовых программ, а чтобы никому не вредить, исследую программы, что специально написаны для взлома - crackme или keygenme.

Жребий пал на q_keygenme_1.0 by quetz.

Читать далее

Параллельный метод сортировки массива std::thread

Уровень сложностиСредний
Время на прочтение6 мин
Количество просмотров7.9K

Золотые времена подошли к концу, когда разработчикам можно было ничего не делать, а программное обеспечение работала с каждым годом все быстрее.

Читать далее

AES, autoconf & emscripten. Часть II — симметричное шифрование

Время на прочтение13 мин
Количество просмотров3.5K

В предыдущей части мы познакомились с тем, что такое симметричное и ассиметричное шифрование, посмотрели на алгоритм ассиметричного шифрования на основе задачи о рюкзаке, кратко пробежались по его реализации на C#. Теперь мы реализуем популярный алгоритм симметриченого шифрования AES на C++. В этой второй части мы кратко пробежимся по реализации, посмотрим, как запускать тесты при помощи фреймворка googletest в сборочной системе autoconf, и попробуем скомпилировать наш проект в WebAssembly. Пристёгивайтесь, будет жарко!

Пристегнуться!

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

Неожиданная проблема с макросами (точнее без макросов)

Уровень сложностиСредний
Время на прочтение3 мин
Количество просмотров5.6K

image


Макросы — один из самых мощных инструментов в языках программирования. В самом простом виде макрос, это символьное имя, которое заменяется на другое или целую последовательность программных инструкций, что позволяет упростить процесс написания кода при меньших затратах времени и усилий на кодирование, чем если бы программист писал все целиком вручную.


Возможности макросов зависят от конкретного языка программирования (макропроцессора) и некоторые из языков программирования позволяют себя расширять новыми синтаксическими конструкциями, фактически, реализуя парадигму DSL для конкретной решаемой задачи. Подобные возможности добавляют новые области применения и способы разработки больших программных системы, например, за счет использования языково-ориентированного программирования.


Если же говорить о простых реализациях макросов, например как для языков С и С++, то умные люди и умные книжки советуют избегать использования макросов и по возможности заменять их шаблонами, константами и inline-функциями. Ведь с помощью макросов можно не только упростить код, но и не менее изящно стрелять в ноги себе или своих товарищей.


И вот при окончательной доработке синтаксиса макросов для нового языка программирования я неожиданно столкнулся со сценарием, который элементарно реализуется с помощью макропроцессора C/C++, но который невозможно повторить при использовании любого из рекомендованных инструментов для их замены. И я буду очень рад, если ошибаюсь и кто-нибудь подскажет решение, которое можно сделать без применения макропроцессора.

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

Развитие QSqlTableModel и QTableView

Уровень сложностиСложный
Время на прочтение2 мин
Количество просмотров3.1K

Возможно вам тоже покажется, что развитие Qt как минимум в части Sql остановилось этак лет 12 назад.

А ведь фреймворк заслуживает развития ибо базовые классы уровня QSqlTabelModel и QTableView предоставляют богатый функционал для реализации ваших запросов.

Как на Qt работать с таблицами базы данных

Просто о RCU (Read–Copy-Update). Часть 2

Уровень сложностиСредний
Время на прочтение4 мин
Количество просмотров2.6K

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

Читать далее

Рекурсивные регулярные выражения

Время на прочтение3 мин
Количество просмотров7.6K

Принялось решение добавить регулярные выражения в свой язык программирования. По началу я подумал, что мне совершенно незачем в них разбираться и в интернете, наверняка, уже есть полно готовых библиотек. Стал искать, нашёл какие-то осколки кода на С++, которые ничего не дают. Пришлось самому разобраться, что такое регулярные выражения тут. Ради спортивного интереса, я решил сделать свою библиотеку на С++.

Стал делать и подумал, а почему бы мне не добавить туда своих тараканов. Я решил добавить две конструкции:

{namesubexpression} - вызов под выражения по имени "namesubexpression",
($namesubexpression:BodyExpression) - описание под выражения с именем "namesubexpression".

Само описание под выражения может встречаться в любом месте структуры регулярного выражения и игнорируется при поиске, подобно закоментированым: (#MeComment).
Сразу же возникает проблема бесконечной рекурсии.
Вот пример рекурсивного регулярного выражения, который недопустим: ($E:{E}){E}

Конечно, я сделал стадию валидации и такие поисковые конструкции просто не допустятса в поисковую машину. Также валидацию не пройдет выражение, которое содержит в себе вызов не описанного под выражения.

Вот пример текста, который можно спарсить рекурсивным регулярным выражением (РРВ): [[[[[A]]]]]
А вот его РРВ: ($RRE:\[({RRE}|A)\]){RRE}

Я также решил добавить три зарезервированные конструкции:
{:String} соответствует выражению: (("(\\.|[^"])*")|('(\\.|[^'])*'))
{:Digit} соответствует выражению: (-?[0-9]+.?[0-9]*[Ee]?-?[0-9]*)
{:Name} соответствует выражению: ([A-Za-z][A-Za-z0-9]*)
Но их поисковая система не использует структурные элементы аналогичных выражений, а организованна встроенным машинным поиском, который работает значительно быстрее и возвращает одну целую строку текста, в которой содержится всё тело найденного соответствия а не части для каждого компонента в аналогичных регулярных выражениях.

Читать далее

Размышление об Active Object в контексте Qt6. Часть 3. HttpManager

Время на прочтение10 мин
Количество просмотров2K

Во всех предыдущих статьях мы рассматривали лишь самый простой пример — сериализованный вывод сообщений на экран в отдельном потоке.

Пришло время, наконец, сделать что-то более реальное и существенное, пусть и не очень сложное. И этим будет менеджер http запросов.

Читать далее

Игровое меню SFML C++

Время на прочтение7 мин
Количество просмотров15K

Предыдущая тема

Используя графические объекты библиотеки SFML С++, создаём прототип игрового меню. Для практического использования, игровое меню разработано в виде класса GameMenu, который можно подключить к своему проекту через заголовочный файл.

Читать далее

Вклад авторов