Есть хороший способ начать свой путь в системное программирование: написать эмулятор и ассемблер для какого-нибудь простого процессора. Сегодня популярностью в узких кругах пользуются fantasy consoles: виртуальные игровые приставки в ретродухе. Я расскажу, как создать свой вариант виртуальной приставки BytePusher с процессором, имеющим всего одну команду. Если вы интересуетесь системным программированием, любите изучать необычные архитектуры процессоров или цените произведения из области демосцены, то эта статья для вас.
Рубрика «низкоуровневое программирование»
Толкаем байты, или Простейший эмулятор своими руками
2024-12-24 в 8:27, admin, рубрики: BytePusher, emulator, ассемблер, Демосцена, низкоуровневое программированиеКак работает протокол X11 на самом нижнем уровне
2024-01-05 в 16:50, admin, рубрики: linux, X11, низкоуровневое программирование, ПрограммированиеX11 это тот механизм на чем работает весь графический интерфейс Unix подобных ОС.
Но мало кто знает как он работает на самом деле. Потому что с годами он оброс слоями и слоями библиотек, которые стремятся скрыть саму сущность протокола.
А протокол в своей сути прекрасен. Он лаконичен и почти совершенен.
В Интернете есть полная документация по протоколу. Но дело в том, что эта документация большая, написана не совсем ясным языком и по сути представляет просто спецификация. Важные моменты никак не обозначены, а как использовать тоже оставлено на фантазии читателя.
А все книги и статьи по использованию X11 описывают это через библиотеки прокладки типа XLib и XCB, и даже, что хуже, GTK или Qt.
Так что документацию приходится читать всю и самому выделять что важно, а что не очень. Придумывать сценарии использования и писать хотя бы короткие программы чтобы испробовать как все работает на самом деле.
Как бы то ни было, если кому-то интересно как все работает на самом деле, пожалуйста под кат.
До последнего байта: минимальный вариант Hello World для .NET
2023-07-16 в 21:24, admin, рубрики: .net, C#, hello world, Занимательные задачки, минификация, низкоуровневое программирование, пет-проект, ПрограммированиеВот вам тупой вопрос, который вы сами, наверное, никогда себе не задавали. Каково минимальное количество байт, которые необходимо сохранить в исполняемом .NET-файле, чтобы CLR напечатала "Hello, World!" в консоли стандартного вывода?

Simics: Забиваем гвозди сваебоем
2022-09-23 в 11:14, admin, рубрики: kolibrios, Simics, ассемблер, Блог компании Auriga, виртуализация, колибри, низкоуровневое программирование, операционные системы, отладка, симикс, системное программированиеЛюбите ли вы отзывчивые программы так, как люблю их я? Любовь эта привела меня к Колибри ОС - невероятно шустрой операционной системе, которая запускает программу до того, как вы осознаете, что кликнули по ней. И недавно у неё нашли уязвимость: ping of death.
Так получилось, что моя первая работа была связана с симуляцией компьютерных систем – от серверов до мобильных устройств. И там мы использовали симулятор Simics. Этой системой пользуются крупные производители железа для опережающей разработки драйверов.
Как написать свою кроссплатформенную библиотеку для хуков и не отстрелить себе ноги
2022-07-24 в 10:42, admin, рубрики: c++, ассемблер, ненормальное программирование, низкоуровневое программирование, реверс-инжиниринг, хукиВ текущих реалиях, для перехвата нативных функций существует большое множество библиотек. Но что делать если ни одна из них тебе не нравится?
Конечно же написать свою!
В этой статье я расскажу что лежит внутри библиотек для перехвата x86 кода и почему оно так работает. А также - как искал баги неделями, и что из этого вообще получилось
Сразу же немного обозначу терминологию, используемую в тексте:
Хук — перехват функции, когда перед вызовом какого-то кода выполняется наш коллбэк.
Трамплин — оригинальный код, который нужно вызвать для передачи управлению обратно в перехваченную функцию
NOP опкод - Читать полностью »
Вычисления без инструкций на x86
2020-12-16 в 12:35, admin, рубрики: red pill, x86, виртуализация, ненормальное программирование, низкоуровневое программирование, Процессоры, системное программирование, тьюринг-полнота, эзотерическое программирование
В этой статье обсуждается необычное применение особенностей защищённого режима архитектуры x86 — для произведения вычислений без исполнения инструкций, то есть за счёт внутренних механизмов процессора: аппаратного переключения задач, хитроумного управления памятью и нетривиальной логики Читать полностью »
Что делает Rust универсальным языком программирования
2020-05-30 в 21:26, admin, рубрики: Rust, высокоуровневое программирование, низкоуровневое программирование, прикладное программирование, Программирование, Промышленное программирование, системное программирование, языки программированияДолгое время Rust позиционировался исключительно как язык для системного программирования. Попытки использовать Rust для высокоуровневых прикладных задач зачастую вызывали усмешку у значительной части сообщества: зачем использовать инструмент в том качестве, на которое он не рассчитан? Какая польза от возни с типами и анализатором заимствований (borrow checker), если есть Python и Java со сборкой мусора? Но другая часть сообщества всегда видела потенциал Rust именно как языка прикладного, и даже находила его удобным в использовании для быстрого прототипирования — во многом благодаря его особенностям, а не вопреки им.
Назад к истокам: рулим компьютером прямо из MBR
2020-03-26 в 21:00, admin, рубрики: mbr, ассемблер, загрузка, КодоБред, ненормальное программирование, низкоуровневое программирование, опкоды, Процессоры, системное программированиеРазворачивал в очередной раз Linux-образ на USB-drive (почему-то им оказался Manjaro, но это совсем другая история), и в голову пробрались странные мысли: BIOS увидел флешку, а дальше-то что? Ну да, там MBR, скорее всего GRUB и… А раз в MBR затесался чей-то кастомный код, значит и простой человек из Адыгеи может запрограммировать что-нибудь на «большом» компьютере, но вне операционной системы.
А так как делать такие штуки на языках высокого уровня слишком жирно, а ассемблеров мы не знаем, будем шпарить прямо на опкодах для 8086.
О работе ПК на примере Windows 10 и клавиатуры ч. 1
2020-01-09 в 14:37, admin, рубрики: C, C#, c++, windows, архитектура, низкоуровневое программирование, операционные системы, разработка под windows, системное программированиеМеня зовут Андрей Артемьев, я работаю в Microsoft над ядром ОС Windows 10, ранее я работал над Windows 10x (WCOS), XBox, Windows Phone и Microsoft Edge. Я хочу популярно в образовательных целях рассказать о том как работает компьютер на примере клавиатурного ввода и Windows 10. Данный цикл статей рассчитан в первую очередь на студентов технических специальностей. Мы рассмотрим какой путь проходит информация о нажатой клавише от клавиатуры до отображения в Notepad.exe. В виду обширности и междисциплинарности темы в статьях могут быть неточности, о которых сообщайте в комментариях. Какая-то информация может быть устаревшей в виду скорости с которой развивается Windows.
Читать полностью »
Встраиваемые функции в Go
2019-09-16 в 21:16, admin, рубрики: assembly, Go, golang, ida, дизассемблирование, низкоуровневое программирование
Go позволяет писать на ассемблере. Но авторы языка написали такую стандартную библиотеку, что бы этого делать не пришлось. Есть способы писать переносимый и быстрый код одновремено. Как? Добро пожаловат под cut.
Читать полностью »