Горячее
Лучшее
Свежее
Подписки
Сообщества
Блоги
Эксперты
Войти
Забыли пароль?
или продолжите с
Создать аккаунт
Я хочу получать рассылки с лучшими постами за неделю
или
Восстановление пароля
Восстановление пароля
Получить код в Telegram
Войти с Яндекс ID Войти через VK ID
Создавая аккаунт, я соглашаюсь с правилами Пикабу и даю согласие на обработку персональных данных.
ПромокодыРаботаКурсыРекламаИгрыПополнение Steam

Пикабу Игры +1000 бесплатных онлайн игр

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

Герои Войны

Стратегии, Мидкорные, Экшены

Играть
🔥 Дрифт и гонки без правил!
Садись за руль, жги резину и уноси баллы в безумных поворотах!
🚗 Реалистичный дрифт
🏁 Захватывающие трассы
💨 Улучши свою тачку и побеждай!

Дрифт Без Лимита

Гонки, Симуляторы, Спорт

Играть
Игра «История одной фермы» - увлекательное и бросающее вызов вашим серым клеточкам приключение, от которого невозможно оторваться!

История одной фермы - маджонг

Маджонг, Казуальные, Приключения

Играть
Постройте дом своей мечты прямо сейчас! Соединяйте три предмета в один ряд, зарабатывайте звезды и покупайте красивые детали интерьера. Звучит заманчиво? Увлекательная головоломка в жанре «три в ряд» заставит размяться ваш мозг. Присоединяйтесь к онлайн-игре бесплатно прямо сейчас!

Строить дом - три в ряд

Три в ряд, Казуальные, Детские

Играть
Погрузись в мир куриных перестрелок! Хватай пушку и пусть только перья останутся на месте твоих врагов!

Чикен Страйк

Шутер, Экшены, Для мальчиков

Играть

Топ прошлой недели

  • CharlotteLink CharlotteLink 1 пост
  • Syslikagronom Syslikagronom 7 постов
  • BydniKydrashki BydniKydrashki 7 постов
Посмотреть весь топ

Лучшие посты недели

Рассылка Пикабу: отправляем самые рейтинговые материалы за 7 дней 🔥

Нажимая кнопку «Подписаться на рассылку», я соглашаюсь с Правилами Пикабу и даю согласие на обработку персональных данных.

Спасибо, что подписались!
Пожалуйста, проверьте почту 😊

Новости Пикабу Помощь Кодекс Пикабу Реклама О компании
Команда Пикабу Награды Контакты О проекте Зал славы
Промокоды Скидки Работа Курсы Блоги
Купоны Biggeek Купоны AliExpress Купоны М.Видео Купоны YandexTravel Купоны Lamoda
Мобильное приложение

C++

С этим тегом используют

Программирование IT IT юмор Программист Python Помощь Разработка Все
798 постов сначала свежее
8
0sadchi
0sadchi
4 месяца назад
Лига Разработчиков Видеоигр

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

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

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

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

Свой Cheat Engine с нуля! Часть 1 - Получаем список процессов и модули в нем Windows, Программирование, Cheat Engine, C++, Hacking, Длиннопост

Мы можем ее записать так.

Свой Cheat Engine с нуля! Часть 1 - Получаем список процессов и модули в нем Windows, Программирование, Cheat Engine, C++, Hacking, Длиннопост

Далее в процедуре идет блок с переменными

Свой Cheat Engine с нуля! Часть 1 - Получаем список процессов и модули в нем Windows, Программирование, Cheat Engine, C++, Hacking, Длиннопост

Как итог я оставил так

Свой Cheat Engine с нуля! Часть 1 - Получаем список процессов и модули в нем Windows, Программирование, Cheat Engine, C++, Hacking, Длиннопост

Для замены под C++ объекта ProcessList: TStrings, я использовал std::unordered_map<std::wstring, PProcessListInfo>& process_list. Потому что в коде, была логика схожая с мапой, когда у нас по имени процесса идет связка с объектом, содержащим информацию о нем (фактически один ProcessID..)

Свой Cheat Engine с нуля! Часть 1 - Получаем список процессов и модули в нем Windows, Программирование, Cheat Engine, C++, Hacking, Длиннопост

Что у нас эквивалентно

Свой Cheat Engine с нуля! Часть 1 - Получаем список процессов и модули в нем Windows, Программирование, Cheat Engine, C++, Hacking, Длиннопост

И в конце при необходимости это включается в лист

Свой Cheat Engine с нуля! Часть 1 - Получаем список процессов и модули в нем Windows, Программирование, Cheat Engine, C++, Hacking, Длиннопост

Заменил на

Свой Cheat Engine с нуля! Часть 1 - Получаем список процессов и модули в нем Windows, Программирование, Cheat Engine, C++, Hacking, Длиннопост

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

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

Через поиск по файла по фразе EnumModules я вышел на вот такую вот функцию

Свой Cheat Engine с нуля! Часть 1 - Получаем список процессов и модули в нем Windows, Программирование, Cheat Engine, C++, Hacking, Длиннопост

так же у нее есть 32битная реализация

Свой Cheat Engine с нуля! Часть 1 - Получаем список процессов и модули в нем Windows, Программирование, Cheat Engine, C++, Hacking, Длиннопост

Результатом работы оных будет вот такая вот структура

Свой Cheat Engine с нуля! Часть 1 - Получаем список процессов и модули в нем Windows, Программирование, Cheat Engine, C++, Hacking, Длиннопост
Свой Cheat Engine с нуля! Часть 1 - Получаем список процессов и модули в нем Windows, Программирование, Cheat Engine, C++, Hacking, Длиннопост

Самыми интересными для нас будут PVOID DllBase - начало модуля относительно процесса , ULONG SizeOfImage - размер модуля (сколько байт он занимает внутри процесса) и UNICODE_STRING FullDllName. Но с именем все не так просто. Структура выглядит так

Свой Cheat Engine с нуля! Часть 1 - Получаем список процессов и модули в нем Windows, Программирование, Cheat Engine, C++, Hacking, Длиннопост

Казалось бы, вот же она.. PWSTR Buffer строка.. выводись в студаут!! А вот и нет, здесь находится адрес в чужом пространстве, чтобы прочитать эту строку, придется сделать следующее.

Свой Cheat Engine с нуля! Часть 1 - Получаем список процессов и модули в нем Windows, Программирование, Cheat Engine, C++, Hacking, Длиннопост

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

Все, до чего я докопался - это метод

Свой Cheat Engine с нуля! Часть 1 - Получаем список процессов и модули в нем Windows, Программирование, Cheat Engine, C++, Hacking, Длиннопост

Данные о драйвере выглядят так

Свой Cheat Engine с нуля! Часть 1 - Получаем список процессов и модули в нем Windows, Программирование, Cheat Engine, C++, Hacking, Длиннопост

Но, к сожалению, с наскока подключиться к драйверу не удалось и лучший ответ, который я получилъ

Свой Cheat Engine с нуля! Часть 1 - Получаем список процессов и модули в нем Windows, Программирование, Cheat Engine, C++, Hacking, Длиннопост

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

Конец! А кто слушал - можете прокачать свои навыки на крутейшем курсе по реверсу ММОРПГ :)

Показать полностью 15
[моё] Windows Программирование Cheat Engine C++ Hacking Длиннопост
2
3
georgiyozhegov
georgiyozhegov
4 месяца назад
Лига программистов
Серия Программирование

Читщит По Умным Указателям⁠⁠

Читщит По Умным Указателям Обучение, Rust, Программирование, C++, Длиннопост

Наглядная иллюстрация того, что может случиться с C++ программистами.

В Rust необычная схема управления памятью. Он не использует сборщик мусора, как в Java и Go, что делает его быстрым. Скорость Rust сопоставима со скоростью C.

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

В статье специально использованы простейшие примеры, чтобы понять их было легче.

Типы

Box

Нужен для хранения объектов в куче, а не на стеке.

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

Пример кода, который не будет работать.

struct Expression {

operator: Operator,

left: Expression, // Ошибка: recursive type has infinite size

right: Expression, // Ошибка: recursive type has infinite size

}

Чинится обертыванием left и right в Box.

struct Expression {

operator: Operator,

left: Box<Expression>,

right: Box<Expression>,

}

Rc

Позволяет нескольким переменным владеть одним объектом размещенным в куче.

Не работающий код.

let a = "Hello, World!".to_string();

let b = a;

let c = a; // Ошибка: use of moved value

Чтобы он заработал, добавим Rc.

let a = Rc::new("Hello, World!".to_string());

let b = Rc::clone(&a);

let c = Rc::clone(&a);

Код также будет работать если мы скопируем объект.

let a = "Hello, World!".to_string();

let b = a.clone();

let c = a;

Но прямое копирование может серьезно повредить производительности. Преимущество Rc в том, что при присваивании не создаётся новый объект, а даётся ссылка на уже существующий.

Arc

То же что и Rc, но безопасное для использования в многопоточных приложениях. Это значит, что его можно использовать из разных потоков, не боясь гонок данных.

let a = Arc::new(1);

let b = Arc::clone(&a);

let c = Arc::clone(&a);

Дороже с точки зрения производительности из-за способа подсчёта ссылок.

RefCell

Позволяет изменять данные внутри себя даже если объявлен как неизменяемый.

let a = RefCell::new(1);

*a.borrow_mut() += 1;

dbg!(a); // 2

Комбо

RefCell часто комбинируют с Rc в виде Rc<RefCell<T>>. Это позволяет каждому владельцу ссылки изменять общий объект.

let a = Rc::new(RefCell::new(1));

let b = Rc::clone(&a);

let c = Rc::clone(&a);

*b.borrow_mut() += 1;

dbg!(&a); // 2

dbg!(&c); // Тоже 2

*c.borrow_mut() += 1;

dbg!(&a); // 3

dbg!(&b); // Тоже 3

Заключение

Главное преимущество умных указателей – избегание ошибок типа segfault и выстрелов в ногу, характерных для C и C++, сохраняя при этом удобство использования.

Если статья была полезной, вас могут заинтересовать и другие статьи в моём телеграм-канале.

Показать полностью
[моё] Обучение Rust Программирование C++ Длиннопост
16
Fantomas1994
Fantomas1994
4 месяца назад

Рубрика "Сломай нейронку". Опасные итераторы)⁠⁠

Рубрика "Сломай нейронку". Опасные итераторы) C++, Программирование, Ооп, ChatGPT, Длиннопост, Скриншот
Показать полностью 1
[моё] C++ Программирование Ооп ChatGPT Длиннопост Скриншот
16
11
neverending.cpp
neverending.cpp
4 месяца назад
Лига программистов C/C++

Книга по C++, которую ты обязан прочитать в 2025 году⁠⁠

Я почему-то уверен, что она у тебя уже есть. Либо в списке литературы для самообразования, либо где-то среди скачанных pdf, а может, даже в печатном виде. Возможно, ты даже начинал её читать, но… работа, таски, собеседования… деньги вроде и так платят… и ты так и не осилил Мейерса "Эффективный и современный С++".

А ведь именно эта книга — ключ, который поможет тебе пробить потолок уровня middle и начать движение к senior.

Да, можно скачать список из 400 популярных вопросов, выучить их и бодро ответить на вопрос: «Расскажи про std::unique_ptr». А потом тебе прилетает дополнительный вопрос: «А как изменится размер std::unique_ptr при использовании пользовательского удалителя?» Иии… Я не буду додумывать твой уровень знаний. Попробуй сам ответить на этот вопрос и поставь себе оценку🙂
И это только один из примеров тонких нюансов, которые описаны в этой книге и которые реально спрашивают на собеседованиях.

Ещё одна сильная сторона книги: почти каждая фича современного C++ иллюстрируется примерами её использования в реальном проде. А это большая редкость для технической литературы.

Хватит откладывать эту книгу на «потом». Поставь цель на этот год и, наконец-то, найди время, чтобы прочитать 300 страниц "Эффективного и современного С++".

Книга по C++, которую ты обязан прочитать в 2025 году Кросспостинг, Pikabu Publish Bot, IT, C++, Программирование, Книги, Самообразование
Показать полностью 1
[моё] Кросспостинг Pikabu Publish Bot IT C++ Программирование Книги Самообразование
25
11
0sadchi
0sadchi
4 месяца назад
Лига Разработчиков Видеоигр

Похищаем CheatEngine на C++ с нуля. Часть 0 - Введение⁠⁠

🌐 Введение

Данной статьей я хочу продемонстрировать процесс погружения в неизвестную сферу, методы и средства для сбора информации. Чтобы раз и навсегда закрыть вопрос какие материалы “почитать”, ведь, действуя по гайду “я повторил, но ничего не понял”.

Что именно будем делать? Попробуем без особых знаний залезть в исходники софта для отладки и модификации кода, под названием Cheat Engine. Он создавался годами, а наша задача — апроприировать эти знания за короткий промежуток времени!

👤 Что такое Cheat Engine?

Cheat Engine — это мощный инструмент для реверс-инжиниринга и модификации кода. Хотя он позиционируется как “Чит Движок”, он фактически способен конкурировать с любыми дебаггерами по ряду причин:

  • 🔒 Оснащён собственным драйвером, который даёт более высокий уровень прав и скрытность.

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

  • 🌟 Бесплатный и открытый исходный код делает его удобным для изучения.

💪 Зачем писать свой Cheat Engine?

Мы поняли, что это классная штука, она бесплатная, открытая и она работает. Так зачем же его писать самим?!
Главное - 🎓 Это сложная и интересная задача. Ну и я ни на что не намекаю, но …😉

Похищаем CheatEngine на C++ с нуля. Часть 0 - Введение C++, Читер, Движок, Windows, Игры, Длиннопост

Не сложно догадаться, что завести такой пет-проект в портфолио будет не плохо.

🔄 План работы

Чтобы создать минимально рабочий прототип, нам нужно реализовать ключевые функции:

  1. 🔐 Подключение к процессу.

  2. 🤖 Чтение и сканирование памяти.

  3. 🛠️ Редактирование памяти.

  4. 🔄 Таблица с найденными адресами.

  5. 📝 Дизассемблирование кода.

  6. 🏢 Отображение списка загруженных библиотек.

  7. 🌧️ Отладка (брейки, стек вызовов, регистры).

🔍 Исследуем исходники Cheat Engine

Открываем репозиторий Cheat Engine и видим несколько важных директорий:

Похищаем CheatEngine на C++ с нуля. Часть 0 - Введение C++, Читер, Движок, Windows, Игры, Длиннопост
  • Cheat Engine — основной код.

  • DBKKernel — проект драйвера.

  • DBVM — гипервизор.

  • lua — движок для скриптов.

Так как драйвер и гипервизор мы пока трогать не будем, откроем основной проект.

😅 Тут нас ждёт сюрприз: Cheat Engine написан на Паскале!

  • .lfm — GUI формы.

  • .pas — исходники с функциями.️️ 🔖 (они-то нам и нужны)

🌟 Разбираемся с кодом

Заглянув в основной проект, можно заметить, что там ку-у-у-у-ча файлов, но пугаться не стоит, так как главных всего-то ничего! А именно…

🔄 ProcessList.pas
    Этот файл нужен для сбора и хранения информации о процессах.

procedure GetProcessList(ProcessList: TStrings; NoPID: boolean=false; noProcessInfo: boolean=false);

Перегрузка процедуры для управления выводом информации о процессах.

Похищаем CheatEngine на C++ с нуля. Часть 0 - Введение C++, Читер, Движок, Windows, Игры, Длиннопост
Похищаем CheatEngine на C++ с нуля. Часть 0 - Введение C++, Читер, Движок, Windows, Игры, Длиннопост
Похищаем CheatEngine на C++ с нуля. Часть 0 - Введение C++, Читер, Движок, Windows, Игры, Длиннопост

Чтобы продвинуться дальше, просто забиваем в поиск по файлам название функции GetProcessList, это приведет нас к следующему файлу и еще одной интересной функции…

Похищаем CheatEngine на C++ с нуля. Часть 0 - Введение C++, Читер, Движок, Windows, Игры, Длиннопост

🔄 MainUnit.pas (Это главный файл с логикой для GUI форм)
    Здесь вызывается Open_Process, который используется во всех интерфейсах дебаггера (Kernel, DBVM).

🔄 CEFuncProc.pas
    Тут находится реализация Open_Process.

🔄 NewKernelHandler.pas
     Содержит ключевые функции, такие как:

  function ReadProcessMemory(...);   function WriteProcessMemory(...);

🔄 Disassembler.pas
    Файл на 16 000 строк, отвечающий за дизассемблирование кода.

🚀 Итоги

Теперь мы знаем как:
  ✅ Получать список процессов.
  ✅ Открывать хендл к процессу.
  ✅ Читать и записывать память.

Следующий шаг — разобраться с отладчиком и дизассемблером! 💪

Функции отладчика находятся все в том же NewKernelHandler.pas, они так же представлены перегрузками для разных интейфейсов: winapi, driver, server и т.д. Но в данном случае мы пока обратим внимание на winapi и уже после будет шаг за шагом разбирать другие методы работы.

Ключевыми будут 👇

// Получение адреса функции GetThreadContext из библиотеки WindowsKernel и присваивание его переменной GetThreadContext GetThreadContext:=GetProcAddress(WindowsKernel,'GetThreadContext');

// Получение адреса функции SetThreadContext из библиотеки WindowsKernel и присваивание его переменной SetThreadContext SetThreadContext:=GetProcAddress(WindowsKernel,'SetThreadContext');

🤏 Именно через SetThreadContext мы и будем устанавливать аппаратные точки останова, изменяя регистр DRx (Debug Registers).

🔹 Как установить хардверный бряк через SetThreadContext?

  • 1️⃣ Использовать GetThreadContext, чтобы получить текущий контекст потока.

  • 2️⃣ Изменить один из DR0–DR3 (адрес бряка).

  • 3️⃣ Настроить DR7 для активации бряка.

  • 4️⃣ Применить изменения через SetThreadContext.

🔹 Пример кода

CONTEXT ctx; ctx.ContextFlags = CONTEXT_DEBUG_REGISTERS; GetThreadContext(hThread, &ctx);

ctx.Dr0 = targetAddress; // Адрес для бряка

ctx.Dr7 |= 1; // Включаем бряк

SetThreadContext(hThread, &ctx);

📌 Важно: бряк привязан к конкретному потоку, а не всему процессу.

👁️👁️👁️ Там же видим

// 🔍 Получение адреса функции Wow64GetThreadContext из библиотеки WindowsKernel и присваивание его переменной Wow64GetThreadContext

Wow64GetThreadContext:=GetProcAddress(WindowsKernel,'Wow64GetThreadContext');

// 🔍 Получение адреса функции Wow64SetThreadContext из библиотеки WindowsKernel и присваивание его переменной Wow64SetThreadContext

Wow64SetThreadContext:=GetProcAddress(WindowsKernel,'Wow64SetThreadContext');

SuspendThread:=GetProcAddress(WindowsKernel,'SuspendThread'); // ⏸️ Получение адреса функции SuspendThread из библиотеки WindowsKernel, которая используется для приостановки выполнения потока

ResumeThread:=GetProcAddress(WindowsKernel,'ResumeThread'); // ▶️ Получение адреса функции ResumeThread из библиотеки WindowsKernel, которая используется для возобновления выполнения ранее приостановленного потока

WaitForDebugEvent:=GetProcAddress(WindowsKernel,'WaitForDebugEvent'); // ⏳ Получение адреса функции WaitForDebugEvent из библиотеки WindowsKernel, которая используется для ожидания события отладки в процессе или потоке

ContinueDebugEvent:=GetProcAddress(WindowsKernel,'ContinueDebugEvent'); // 🔄 Получение адреса функции ContinueDebugEvent из библиотеки WindowsKernel, которая используется для продолжения выполнения после обработки события отладки

DebugActiveProcess:=GetProcAddress(WindowsKernel,'DebugActiveProcess'); // 🛠️ Получение адреса функции DebugActiveProcess из библиотеки WindowsKernel, которая используется для начала отладки процесса по его идентификатору

Здесь же видим непонятный WindowsKernel, пробуем поискать в файле и находим:

WindowsKernel: Thandle; // 🏗️ Переменная, хранящая дескриптор ядра операционной системы Windows

Но это только объявление, пробуем прощелкать далее и находим определение:

WindowsKernel:=LoadLibrary('Kernel32.dll'); // 📦 Попытка загрузить библиотеку ядра Windows (Kernel32.dll) и сохранение дескриптора в переменную WindowsKernel. // ❌ Если библиотека не найдена, то WindowsKernel будет равен 0.

Этого достаточно для базовой работы с процессами. Остается поглядеть, что там в Disassembler’е.
Как мы помним, там 16 000 строк кода, и все, что они делают, так это проверяют каждый байт на константное значение.
Если совпадает, то устанавливают строковую мнемонику (ADD, MOV и др.).

Рассмотрим поближе. У нас есть базовый объект дизассемблера, defaultDisassebler:

defaultDisassembler:=TDisassembler.create; // 🛠️ Создаем объект по умолчанию и присваиваем его глобальной переменной.

Который инициализируется методом create в классе TDisassembler,
далее на участок памяти вызывается функция disassemble, которая возвращает строку.
Начинается функция на 1624 строке, а заканчивается на 15710 строке.

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

case memory[0] of //opcode

$00 : begin

//🏹🏹

if (aggressivealignment and (((offset) and $f)=0) and (memory[1]<>0) ) or ((memory[1]=$55) and (memory[2]=$89) and (memory[3]=$e5)) then

begin

description:='Filler'; lastdisassembledata.opcode:='db'; LastDisassembleData.parameters:=inttohex(memory[0],2);

end

else

begin

description:='Add';

//🏹🏹

lastdisassembledata.opcode:='add';

lastdisassembledata.parameters:=modrm(memory,prefix2,1,2,last)+r8(memory[1]); inc(offset,last-1);

end;

end;

$01 : begin....

Думаю, на этом можно закончить введение, более подробно рассмотрим каждый из методов уже на практике, когда начнем писать свой mega-omega чит-движок с плюшками.

На этом откланяюсь, а все претензии и пожелания можно писать сюда 👉 https://t.me/osiechan/52, здесь же можно скачать исходные файлы с комментариями на каждой строке (да-да, даже на 16 000 строк) и pdf статьи.

А прокачать свой навыки чито-строителя можно на бесплатном, открытом курсе по созданию бота для мморпг 👉 https://t.me/osiechan/41.

Спасибо за внимание :з.

Показать полностью 6
[моё] C++ Читер Движок Windows Игры Длиннопост
1
3
neverending.cpp
neverending.cpp
5 месяцев назад

Что такое nullptr?⁠⁠

Я бы с ходу ответил что-то подобное:
`nullptr` в C++ — это ключевое слово, которое используется для обозначения нулевого указателя. Оно было введено в стандарт C++11, чтобы заменить старый стиль использования литерала `NULL` или просто числа `0` для указания на нулевой указатель.

А теперь представьте, что вы общаетесь с С-программистом, который знает, что такое указатель и как его занулить. Ваша задача — объяснить, что такое nullptr "под капотом" и чем его устройство отличается от NULL. С NULL всё банально: в зависимости от реализации это может быть либо просто макрос для 0, либо каст 0 к void-указателю. Например:
#define NULL 0
или
#define NULL ((void *)0)

Начнём разбираться

Изучение любой непонятной C++ штуки традиционно начинаем с чтения cppreference :
Ключевое слово nullptr обозначает литерал указателя. Это prvalue типа std::nullptr_t.

Окей, nullptr — это константа времени компиляции, которую можно присвоить только указателю, чтобы занулить его. Но что такое std::nullptr_t?

Читаем cppreference далее:
std::nullptr_t — это тип литерала нулевого указателя nullptr. Это особый тип, который сам по себе не является типом указателя или указателем на тип элемента. Его значениями являются константы нулевого указателя.

Много букв. Так становится намного понятнее:
using nullptr_t = decltype(nullptr);

Как видите, стандарт явно не описывает внутреннее устройство nullptr, но информация о том, что sizeof(std::nullptr_t) равно sizeof(void*), намекает, что nullptr реализуется на аппаратном уровне как указатель на адрес 0.

Вопрос на засыпку: можно ли получить nullptr в результате вычислений?

P.S.: Для любителей бескомпромиссного чтива https://eel.is/c++draft/support.types.nullptr

Показать полностью
[моё] Кросспостинг Pikabu Publish Bot Текст C++ IT Программирование
3
neverending.cpp
neverending.cpp
5 месяцев назад

Наводим суету с live lock⁠⁠

Live lock — это ситуация, когда несколько потоков постоянно меняют своё состояние в ответ на действия друг друга, но при этом никто не достигает прогресса. Это отличается от dead lock тем, что потоки не блокируются полностью, а продолжают выполнение, но не продвигаются вперёд.

Простой пример: два вежливых сотрудника идут навстречу друг другу по коридору. Когда они встречаются, первый отходит вправо, а второй — влево. Они снова оказываются друг напротив друга. Первый отходит влево, а второй — вправо, но вновь оказываются на пути друг друга.

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

#include <iostream>
#include <thread>

enum class Position
{
left,
right
};

void moveA(Position& positionA, const Position& positionB)
{
while (true)
{
if (positionA != positionB)
{
break;
}
if (positionB == Position::right)
{
std::cout << "A sees B on the right, moves back to left\n";
positionA = Position::left;
}
std::cout << "A moves to the right\n";
positionA = Position::right;
}
}

void moveB(const Position& positionA, Position& positionB)
{
while (true)
{
if (positionA != positionB)
{
break;
}
if (positionA == Position::right)
{
std::cout << "B sees A on the right, moves back to left\n";
positionB = Position::left;
}
std::cout << "B moves to the right\n";
positionB = Position::right;
}
}

int main()
{
Position positionA{Position::left};
Position positionB{Position::left};

std::thread t1(moveA, std::ref(positionA), std::cref(positionB));
std::thread t2(moveB, std::cref(positionA), std::ref(positionB));

t1.join();
t2.join();
}

Показать полностью
[моё] Кросспостинг Pikabu Publish Bot Текст IT C++ Программирование
1
6
QuadD4rv1n7
QuadD4rv1n7
5 месяцев назад

Вышел Kali Linux 2024.4⁠⁠

Вышел Kali Linux 2024.4 Linux, Обновление, Инструменты, Linux и Windows, Python, C++, Kali, API, Openai, Ssh, Gnome, Google, Windows 11, Telegram (ссылка), ВКонтакте (ссылка), Длиннопост

Состоялся релиз дистрибутива для экспертов по ИБ и пентестеров Kali Linux 2024.4.

Проект основан на пакетной базе Debian и предназначен для тестирования систем на наличие уязвимостей, проведения аудита безопасности, анализа остаточной информации и выявления последствий атак.

Все оригинальные наработки проекта, созданные для дистрибутива, распространяются под лицензией GPL и доступны через публичный Git‑репозиторий.

Для загрузки решения подготовлены ISO‑образы. Сборки проекта доступны для архитектур x86_64, ARM (armhf и armel, Raspberry Pi, Banana Pi, ARM Chromebook, Odroid).

Для выбора предоставляются рабочие столы Xfce, KDE и GNOME.

Вышел Kali Linux 2024.4 Linux, Обновление, Инструменты, Linux и Windows, Python, C++, Kali, API, Openai, Ssh, Gnome, Google, Windows 11, Telegram (ссылка), ВКонтакте (ссылка), Длиннопост

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

В комплектация дистрибутива входит коллекция эксплоитов и около 400 специализированных утилит для проверки безопасности (14 новых инструментов и многочисленные улучшения добавлены в новой версии), включая Aircrack, Maltego, SAINT, Kismet, Bluebugger, Btcrack, Btscanner, Nmap, p0f.

Помимо этого, в дистрибутив входят средства для подбора паролей (Multihash CUDA Brute Forcer) и WPA ключей (Pyrit), использующие GPU NVIDIA и AMD для ускорения.

В Kali Linux 2024.4 используется ядро Linux 6.11, GNOME 47, улучшена поддержка Raspberry Pi, поддерживается новая версия Python по умолчанию, а также разработчики прекратили выпуск сборок для i386.

Вышел Kali Linux 2024.4 Linux, Обновление, Инструменты, Linux и Windows, Python, C++, Kali, API, Openai, Ssh, Gnome, Google, Windows 11, Telegram (ссылка), ВКонтакте (ссылка), Длиннопост

По информации OpenNET, основные изменения и доработки в Kali Linux 2024.4:

  • прекращено формирование сборок дистрибутива и пакетов ядра Linux для архитектуры i386. В репозитории сохранены пакеты, которые можно использовать для запуска 32-разрядных программ в 64-разрядных окружениях.

  • по умолчанию задействован Python 3.12.

  • в клиенте SSH прекращена поддержка ключей на базе алгоритма DSA (в начале следующего года код для поддержки DSA будет удалён из OpenSSH). Для подключения к старым серверам в базовую поставку добавлена утилита ssh1, собранная из OpenSSH 7.5 и продолжающая поддерживать протокол SSH1.

  • добавлена возможность настройки системных образов для плат Raspberry Pi, используя утилиту Raspberry Pi Imager. Например, при установке на SD-карту можно добавить пользователей, настроить часовой пояс, скопировать свои SSH-ключи, активировать сервис SSH, задать конфигурацию для подключения к беспроводной сети. Расширена поддержка платы Raspberry Pi 5 и добавлена поддержка компьютера Raspberry Pi 500.

  • среда рабочего стола GNOME обновлена до версии 47. Задействована новая тема оформления экрана входа в систему.

  • в состав включены новые утилиты:1. bloodyad - инструментарий для тестирования защищённости Active Directory.

    • certi - утилита для работы с сертификатами ADCS (Active Directory Certificate Services).

    • chainsaw - поиск артефактов при криминалистическом анализе систем Windows.

    • findomain - утилита для определения методом перебора используемых поддоменов.

    • hexwalk - шестнадцатеричный редактор.

    • linkedin2username - генератор списка пользователей, потенциально связанных с учётной записью компании в LinkedIn.

    • mssqlpwner - инструментарий для атаки на MSSQL.

    • proximoth - проведение атаки на беспроводные устройства.

    • python-pipx - запуск исполняемых файлов из Python-пакетов в изолированном окружении.

    • sara - инспектирование защищённости RouterOS.

    • web-cache-vulnerability-scanner - реализация атак на системы фронтэнд-бэкенд.

    • xsrfprobe - проверка уязвимостей класса CSRF/XSRF (Cross Site Request Forgery).

    • zenmap - GUI к nmap.

  • обновлено окружение для мобильных устройств на базе платформы Android - NetHunter, с подборкой инструментов для тестирования систем на наличие уязвимостей.

  • в новой версии в поставку включён инструментарий Wifipumpkin3 для создания фиктивных точек беспроводного доступа. Обновлён каталог мобильных приложений Kali NetHunter store. Расширены возможности инсталлятора. Добавлена поддержка устройств Xiaomi Mi A3 (Android 15), Realme X7 Max 5G и Xiaomi Mi 9 Lite / CC9. Обновлена поддержка Nokia 6.1/6.1 Plus, Realme C11, Xiaomi Mi 9T, Xiaomi Mi A3 и Xiaomi Pocophone F1.

✤ ✤ ✤ ✤ ✤ ✤ ✤ ✤ ✤ ✤ ✤ ✤ ✤ ✤ ✤ ✤ ✤ ✤ ✤ ✤ ✤ ✤ ✤ ✤ ✤ ✤ ✤ ✤ ✤ ✤ ✤ ✤ ✤

❂ Полезные ссылочки: Telegram Канал | ВК Группа - Хижина программиста

Вышел Kali Linux 2024.4 Linux, Обновление, Инструменты, Linux и Windows, Python, C++, Kali, API, Openai, Ssh, Gnome, Google, Windows 11, Telegram (ссылка), ВКонтакте (ссылка), Длиннопост

QR Platforma

Вышел Kali Linux 2024.4 Linux, Обновление, Инструменты, Linux и Windows, Python, C++, Kali, API, Openai, Ssh, Gnome, Google, Windows 11, Telegram (ссылка), ВКонтакте (ссылка), Длиннопост

QR Rutube

Вышел Kali Linux 2024.4 Linux, Обновление, Инструменты, Linux и Windows, Python, C++, Kali, API, Openai, Ssh, Gnome, Google, Windows 11, Telegram (ссылка), ВКонтакте (ссылка), Длиннопост

QR YouTube

📔 Добро пожаловать в Хижину программиста" — место, где программирование превращается в искусство.

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

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

💻 Темы канала Plvideo, Rutube, YouTube:

🌟 Веб-разработка (HTML, CSS, JavaScript, Vue, React);

🌟 Языки программирования (Python, C++, C#, JavaScript);

🌟 Создание настольных приложений (Tauri, Electron);

🌟 Базы данных и API (SQL, NoSQL, REST, GraphQL);

🌟Обзоры инструментов и библиотек.

Показать полностью 5
Linux Обновление Инструменты Linux и Windows Python C++ Kali API Openai Ssh Gnome Google Windows 11 Telegram (ссылка) ВКонтакте (ссылка) Длиннопост
5
Посты не найдены
О Нас
О Пикабу
Контакты
Реклама
Сообщить об ошибке
Сообщить о нарушении законодательства
Отзывы и предложения
Новости Пикабу
RSS
Информация
Помощь
Кодекс Пикабу
Награды
Команда Пикабу
Бан-лист
Конфиденциальность
Правила соцсети
О рекомендациях
Наши проекты
Блоги
Работа
Промокоды
Игры
Скидки
Курсы
Зал славы
Mobile
Мобильное приложение
Партнёры
Промокоды Biggeek
Промокоды Маркет Деливери
Промокоды Яндекс Путешествия
Промокоды М.Видео
Промокоды в Ленте Онлайн
Промокоды Тефаль
Промокоды Сбермаркет
Промокоды Спортмастер
Постила
Футбол сегодня
На информационном ресурсе Pikabu.ru применяются рекомендательные технологии