Search
Write a publication
Pull to refresh
36
0.6

User

Send message

Пишем на C самоизменяющуюся программу x86_64

Level of difficultyMedium
Reading time14 min
Views17K

«Зачем вообще писать программу, меняющую код в процессе выполнения? Это же ужасная идея!»

Да, всё так и есть. Но это и хороший опыт. Такое делают только тогда, когда хотят что-то исследовать, или из любопытства.

Самоизменяемые/самомодифицируемые программы не обладают особой полезностью. Они усложняют отладку, программа становится зависимой от оборудования, а изучение кода превращается в очень утомительный и запутанный процесс, если только вы не опытный разработчик на ассемблере. Единственный разумный сценарий применения самоизменяемых программа в реальном мире — это механизм маскировки зловредного ПО от антивирусов. Моя цель исключительно научна, поэтому ничем подобным я заниматься не буду.

Предупреждение: в этом посте активно используется язык ассемблера x86_64, в котором я ни в коем случае не являюсь специалистом. Для написания статьи мне пришлось изучать приличный объём материалов, и, возможно (почти наверняка), в ней есть ошибки.
Читать дальше →

Любителям x86-64 assembler посвящается: DIY волокна в C++

Level of difficultyHard
Reading time26 min
Views14K

Нас ждёт мозговыносящая смесь 64/32-битного ассемблера и старого-доброго C++. Мы сделаем собственную реализацию... Волокон (fibers) без вызова Win API и звонков в службу спасения.

Читать далее

Системные вызовы Linux, которые должен знать каждый разработчик

Level of difficultyMedium
Reading time7 min
Views17K

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

Читать далее

Как я избавляюсь от компьютерной шеи. Часть 2

Level of difficultyMedium
Reading time6 min
Views5.4K
В первой части:
  • Откуда появился термин «компьютерная шея»;
  • Профессиональные болячки айтишника, с которыми я обратился к врачам;
  • Дело не в шее. Диагноз и назначение лечения после сдачи анализов и посещения невролога, окулиста, рентгенолога;
  • Варианты самостоятельной профилактики ― приложения, упражнения.

В конце предыдущей части я опубликовал фотографии из зала с качелями Юлина и впечатления от первого посещения.

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

Внимание: это мой личный опыт, и все, что я описываю, выполняю по назначению врачей.

На фотографиях — я до/после посещения тренажерного зала. Даты: 02.12.2024 (слева) и 21.02.2025 (справа). Заметно уменьшился горб и стала длиннее шея.




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

Сборка проектов Си и Си++: от простого к сложному. Часть I. Библиотеки

Level of difficultyMedium
Reading time12 min
Views25K

Каждый раз, в течение многих лет, собирая пилотную версию мизерного проекта или простой утилиты, мне кажется, что уж в этот раз точно обойдусь обычным скриптом для сборки, и никакие сборщики проекта мне не понадобятся. Но суровая реальность приводит меня в чувство уже в течение первых нескольких минут работы. Сначала оказывается, что до невозможности простая программка нуждается в JSON-парсере, HTTP-запросах CURL и прочих библиотеках. А по мере возбуждения хотелок эти все зависимости нарастают как снежный ком. И все мечты быстро скомпилировать страничку кода встречают на каждом шаге всё новые и новые проблемы.

Вот сегодня и расскажу о том, какие бывают способы борьбы с зависимостями и сборки проекта из множества файлов на Си++. Заодно те, кто не любят Си++, смогут порадоваться «прелестям» этого процесса. И хоть тема очень важная для программистов, но я обратил внимание, что даже многолетний опыт не гарантирует понимания этих процессов. Но сразу предупреждаю — история длинная даже с учетом всех попыток не убегать на смежные темы.
Читать дальше →

ChatGPT против Школьника. Кто справляется с сочинением лучше?

Level of difficultyEasy
Reading time23 min
Views4.5K

Я программист в крупной IT-компании. На работе использую ChatGPT, с помощью нейросети отлаживаю код и разбираю техническую документацию. 

Моя дочь в этом году сдает ЕГЭ по русскому языку, и я подумал: раз бот хорошо справляется с кодами, почему бы не проверить его на заданиях из экзамена?

Читать далее

Почему слишком быстрые мыши могут ломать FPS в играх

Level of difficultyEasy
Reading time8 min
Views23K

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

По началу может показаться, что работать с мышью и клавиатурой проще всего, но на самом деле это не так; по крайней мере, когда мы говорим о Windows. Множество очень популярных AAA-игр было выпущено с серьёзными проблемами ввода с мышами верхнего ценового диапазона, и в некоторых популярных движках по-прежнему существует эта проблема.

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

Читать далее

Flappy Bird на Си для Android весом APK всего 92 Килобайта

Level of difficultyEasy
Reading time4 min
Views12K

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

Читать далее

Как написать хороший генератор

Level of difficultyEasy
Reading time6 min
Views4.4K

В интернете невероятное количество статей о том "как написать свой генератор на С++20", но почти все они сводятся к новичковым хело вордам и почти ни одной статьи о том как написать хороший генератор. Что ж, это нужно исправлять!

next

FUSE: как написать свою файловую систему

Level of difficultyHard
Reading time21 min
Views19K

Меня зовут Максим, я ведущий разработчик в VK. Занимаюсь инфраструктурой доставки электронной почты в проекте Mail.ru. Наша команда разработала и довела до эксплуатации файловую систему (ФС) на FUSE в рамках проекта распределённой почтовой очереди. В проекте требовалось реализовать сетевую ФС, которая сохраняет данные в трёх копиях, в разных ЦОДах. Цель — повысить отказоустойчивость, чтобы даже полный выход из строя одного ЦОДа не приводил к нарушениям SLA. Эта статья для всех, кто интересуется файловыми системами и хранением данных. Мы обсудим:

- зачем писать свою ФС;

- как написать свою ФС с помощью фреймворка FUSE;

- какие подводные камни есть у эксплуатации FUSE в production.

Эта статья — результат трёх лет разработки ФС. Сейчас самое время заварить чай, рассказ будет долгим. 

Заварить чай и читать

Чем новый ChatGPT-4o отличается от GPT-4, что умеет и почему это супер-важно

Level of difficultyEasy
Reading time7 min
Views89K

В середине мая компания OpenAI представила новую версию самой популярной и хайповой нейросети в мире. Продукт получил название ChatGPT-4o, сохранив порядковый номер своего предшественника. Несмотря на это, чат-бот не только стал быстрее обрабатывать информацию, но и получил поддержку мультимодальности, и это буквально все изменило.

Читать далее

Создание собственного компилятора

Level of difficultyMedium
Reading time17 min
Views21K

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

В рамках данной статьи будет написан простой компилятор на C++, транслирующий код в ассемблер для MS-DOS, а также опробован на реальных боевых задачах.

Читать далее

Xv6: учебная Unix-подобная ОС. Глава 5. Прерывания и драйверы устройств

Level of difficultyMedium
Reading time6 min
Views4.3K

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

Устройство прерывает процессор, когда требует внимания. Обработчик прерывания опознает устройство и вызовет процедуру драйвера. В xv6 это делает процедура devintr.

Файл kernel/console.c содержит код драйвера терминала. Драйвер обрабатывает символы из последовательного порта UART на RISC-V, которые человек вводит на клавиатуре.

QEMU эмулирует микросхему 16550 UART и подключает клавиатуру и экран к UART. На реальном компьютере 16550 управляет портом RS232, который работает с терминалом или другим компьютером.

Драйвер накапливает символы в кольцевом буфере cons.buf. Индекс cons.r указывает на первый символ, который прочтет функция consoleread. Буфер хранит строки символов, а индекс cons.w указывает на начало последней строки, которую еще вводит человек. Индекс cons.e указывает позицию курсора в последней строке для ввода следующего символа.

Читать далее

Большая шпаргалка по Rust. 1/2

Level of difficultyMedium
Reading time29 min
Views18K



Hello world!


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


Вторая часть.


Другой формат, который может показаться вам более удобным.


Обратите внимание: шпаргалка рассчитана на людей, которые хорошо знают любой современный язык программирования, а не на тех, кто только начинает кодить 😉


Также настоятельно рекомендуется хотя бы по диагонали прочитать замечательный Учебник по Rust (на русском языке).

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

О хранении изображений в памяти с выравниванием

Level of difficultyMedium
Reading time23 min
Views5.5K

В разговорах с коллегами, а также по отдельным постам на форумах я заметил, что даже относительно опытные разработчики порой не достаточно глубоко понимают особенности хранения изображений в памяти. Если вы знаете, что такое выравнивание на границу 64-x байт, а также термины типа «длина или шаг строки (LineWidth/StepWidth, Stride)», «зазоры выравнивания (Alignment Gaps)», кроме того в курсе размеров линий кэша и страниц памяти на вашем компьютере, то вам, вероятно, не будет интересно, а остальные, особенно те, кто интересуется обработкой изображений — могут ознакомиться с предлагаемым материалом, и, возможно найдут для себя что-то новое и полезное. Под катом будет немножко кода на Си и ассемблере, пара LabVIEW скриншотов, предполагается также, что у читателя есть базовые знания OpenCV. Для экспериментов понадобится компьютер с камушком, поддерживающим AVX2.

Читать далее

Показываем видео в терминале

Level of difficultyEasy
Reading time5 min
Views17K

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

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

Читать далее

Делаем crackme. Часть вторая: шифруем функции

Level of difficultyMedium
Reading time28 min
Views3.6K

Эта статья вторая в цикле по созданию crackme под linux amd64. В этой части мы создадим исполняемый файл, в котором каждая функция будет зашифрована собственным ключом, и будет расшифровываться только на время исполнения. Процесс создания будет полностью автоматизирован, то есть при добавлении нового кода или изменении старого никаких дополнительных действий делать будет не нужно. Код всего проекта находится в репозитории на github.

Читать далее

Современное состояние инструментов поиска утечек памяти

Level of difficultyMedium
Reading time8 min
Views4.1K

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

Читать далее

Базовый набор для решения задач на LeetCode/Codeforces, ч.1

Level of difficultyEasy
Reading time5 min
Views18K

«Время — это единственная вещь, которую все хотят иметь, но которую нельзя купить или продлить» — Харви Маккей

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

Читать далее
1
23 ...

Information

Rating
3,307-th
Registered
Activity