Рубрика «макросы» - 2

Продолжаем приключения.

Краткое содержание предыдущих частей

Из-за ограничений на возможность использовать компиляторы C++ 11 и от безальтернативности boost'у возникло желание написать свою реализацию стандартной библиотеки C++ 11 поверх поставляемой с компилятором библиотеки C++ 98 / C++ 03.

Были реализованы static_assert, noexcept, countof, а так же, после рассмотрения всех нестандартных дефайнов и особенностей компиляторов, появилась информация о функциональности, которая поддерживается текущим компилятором. Включена своя реализация nullptr, которая подбирается на этапе компиляции.

Настало время type_traits и всей этой «особой шаблонной магии». В предыдущих частях данной главы мы рассмотрели мою реализацию базовых шаблонов стандартной библиотеки и в данной части речь пойдет про комбинацию техники SFINAE с шаблонами и немного о кодогенерации.

Ссылка на GitHub с результатом на сегодня для нетерпеливых и нечитателей:

Коммиты и конструктивная критика приветствуются

Больше шаблонов C++ под катом.
Читать полностью »

Продолжаем приключения.

Краткое содержание предыдущих частей

Из-за ограничений на возможность использовать компиляторы C++ 11 и от безальтернативности boost'у возникло желание написать свою реализацию стандартной библиотеки C++ 11 поверх поставляемой с компилятором библиотеки C++ 98 / C++ 03.

Были реализованы static_assert, noexcept, countof, а так же, после рассмотрения всех нестандартных дефайнов и особенностей компиляторов, появилась информация о функциональности, которая поддерживается текущим компилятором. Включена своя реализация nullptr, которая подбирается на этапе компиляции.

Настало время type_traits и всей этой «особой шаблонной магии». В первой части мы рассмотрели мою реализацию самых простых шаблонов стандартной библиотеки, теперь же заберемся «поглубже» в шаблоны.

Ссылка на GitHub с результатом на сегодня для нетерпеливых и нечитателей:

Коммиты и конструктивная критика приветствуются

Продолжение погружения в мир «шаблонной магии» C++.
Читать полностью »

Продолжаем приключения.

Краткое содержание предыдущих частей

Из-за ограничений на возможность использовать компиляторы C++ 11 и от безальтернативности boost'у возникло желание написать свою реализацию стандартной библиотеки C++ 11 поверх поставляемой с компилятором библиотеки C++ 98 / C++ 03.

Были реализованы static_assert, noexcept, countof, а так же, после рассмотрения всех нестандартных дефайнов и особенностей компиляторов, появилась информация о функциональности, которая поддерживается текущим компилятором. Включена своя реализация nullptr, которая подбирается на этапе компиляции.

Настало время type_traits и всей этой «особой шаблонной магии».

Ссылка на GitHub с результатом на сегодня для нетерпеливых и нечитателей:

Коммиты и конструктивная критика приветствуются

Погрузимся же в мир «шаблонной магии» C++.
Читать полностью »

Продолжаем приключения.

Краткое содержание предыдущих частей

Из-за ограничений на возможность использовать компиляторы C++ 11 и от безальтернативности boost'у возникло желание написать свою реализацию стандартной библиотеки C++ 11 поверх поставляемой с компилятором библиотеки C++ 98 / C++ 03.

Были реализованны static_assert, noexcept, countof, а так же, после рассмотрения всех нестандартных дефайнов и особенностей компиляторов, появилась информация о функциональности, которая поддерживается текущим компилятором. На этом описание core.h почти закончено, но оно было бы не полным без nullptr.

Ссылка на GitHub с результатом на сегодня для нетерпеливых и нечитателей:

Коммиты и конструктивная критика приветствуются

Итак, продолжим.
Читать полностью »

Да - да, вот с этим девизом я и ринулся в бой.

Краткое содержание предыдущих частей

Из-за ограничений на возможность использовать компиляторы C++ 11 и от безальтернативности boost'у возникло желание написать свою реализацию стандартной библиотеки C++ 11 поверх поставляемой с компилятором библиотеки C++ 98 / C++ 03.

Помимо стандартных заголовочных файлов type_traits, thread, mutex, chrono так же были добавлены nullptr.h реализующий std::nullptr_t и core.h куда были вынесены макросы, относящиеся к компиляторозависимому функционалу, а так же расширяющие стандартную библиотеку.

Ссылка на GitHub с результатом на сегодня для нетерпеливых и нечитателей:

Коммиты и конструктивная критика приветствуются

Читать полностью »

В 2016 году исследователи отметили всплеск активности, практически второе рождение, еще недавно казавшейся безнадежно устаревшей техники распространения нежелательного ПО — несущих злонамененную нагрузку макросов в документах Microsoft Office, т.н. «макровирусов».

Самый знаменитый макровирус, Melissa, появился в марте 1999 года. Вирус поразил по-крайней мере сто тысяч компьютеров по всему миру, парализовал работу сотен компаний, ущерб экономике составил 80 миллионов долларов в одних только США.

Безопасность Microsoft Office: макросы VBA - 1

Судя по отчетам компаний, связанных с информационной безопасностью (например, здесь ), на сегодняшний день макровирусы все еще занимают верхние строчки в рейтингах по распространенности.

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

Почему почти через двадцать лет та же техника остается на вооружении всевозможных компьютерных злоумышленников? Попробуем разобраться.
Читать полностью »

Как-то я сказал своему коллеге, что в Rust имеются макросы, ему показалось, что это плохо. Раньше у меня была такая же реакция, но Rust показал мне, что макросы не обязательно плохи.

Где и как их уместно применять? Смотрите под катом.

Читать полностью »

Новость на русском, подробнее на английском

Security Week 48: Root-доступ за усердие, майнер-консультант и пробный макрос-зловред - 1Если человек упорно жмет на ту же кнопку, несмотря на то, что ничего не происходит, то он либо идиот, либо тестировщик по призванию. На этой неделе, например, таким образом удалось обнаружить почти забавную уязвимость в новеньких MacOS HIgh Sierra 10.13.1 и 10.13.2 Beta: оказалось, что если при выборе пользователя в строке для логина напечатать root, а потом поместить курсор в поле для пароля, ничего туда не вводя, и несколько раз кликнуть «Снять защиту», система пустит вас внутрь с root-правами. Разумеется, на такую уязвимость Apple прореагировала мгновенно.
Читать полностью »

Предисловие

Данная статья является авторским переводом с английского собственной статьи под названием God Adapter. Вы также можете посмотреть видео выступления с конференции C++ Russia.

1 Аннотация

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

2 Введение

ПРЕДУПРЕЖДЕНИЕ. Почти все методы, указанные в статье, содержат грязные хаки и ненормальное использование языка C++. Так что, если вы не толерантны к таким извращениям, пожалуйста, не читайте эту статью.

Термин универсальный адаптер происходит от возможности универсальным образом добавить необходимое поведение для любого объекта.Читать полностью »

swap

Обмен значений. Исходный текст и текст после 1-го, 2-го и 3-го выполнения макроса. Далее будут примеры посложнее.

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

На всякий случай напомню: макрос в Notepad++ и в других текстовых редакторах – записанная последовательность действий пользователя над текстом. Макрос можно запускать многократно для быстрого выполнения рутинных операций. Макрос "запоминает" нажатия клавиш и может воспроизводить, например, такие действия:

  • Ввод и удаление символов
  • Перемещение курсора
  • Копирование и вставка
  • Поиск в тексте

Сначала это казалось невозможным, ведь макрос слишком "глуп" и прямолинеен:

  • Нельзя менять последовательность действий во время выполнения макроса.
  • Искомая строка фиксирована — никакой вставки из буфера обмена.
  • Нельзя выполнить действие переменное количество раз, а также пропустить действие в зависимости от какого-либо условия.Читать полностью »

https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js