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

Assembler *

Язык программирования низкого уровня

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

Неестественное выравнивание

Время на прочтение 5 мин
Количество просмотров 4.8K
Совершенный код *Assembler *Компиляторы *

Вот уже 10 лет прошло, как я переводил свои средства программирования в среду x86-64 для Windows 7. А как будто вчера было! Поскольку тогда многие особенности этой среды были для меня внове, они вызывали недоумение. Вот типичный пример.

Читать далее
Всего голосов 24: ↑22 и ↓2 +20
Комментарии 4

Новости

Поиск констант-«матрешек» для сокращения размера данных в программе

Время на прочтение 3 мин
Количество просмотров 1.5K
Совершенный код *Assembler *Компиляторы *

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

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

Читать далее
Всего голосов 9: ↑8 и ↓1 +7
Комментарии 25

Разработка BIOS на языках высокого уровня

Уровень сложности Сложный
Время на прочтение 11 мин
Количество просмотров 16K
Блог компании Timeweb Cloud Ненормальное программирование *Assembler *Системное программирование *C *
Туториал
Ничего лишнего: материнская плата, видеокарта и ROM-BIOS

Меня давно волнует вопрос, как подступиться к разработке на голом железе, на чистом си. Хотелось понять, каким же образом идёт запуск BIOS, u-boot, grub и прочих первичных загрузчиков. Ведь необходимо перейти от ассемблера к тёплому ламповому си и соблюсти условие, собрать всё это в линукс любимым компилятором gcc.

Хотя я и имею достаточный опыт BareMetal-разработки, тем не менее, всё это были чужие проекты со своим кодом. А мне хотелось понять, как начать свой проект с чистого листа, когда есть только чистая железка и идея. Толковых статей как подступится к этой задаче достаточно мало, при этом совершенно непонятно, с какого же края к ней подходить.

Здесь я хочу свести основные моменты разработки BIOS в одном месте и разобраться обо всех проблемах, которые я получил во время своих опытах в разработке (первая и вторая части).
Читать дальше →
Всего голосов 133: ↑132 и ↓1 +131
Комментарии 57

Лабораторный таймер: импортозамещение из подручных материалов

Время на прочтение 6 мин
Количество просмотров 3.9K
Assembler *Программирование микроконтроллеров *Развитие стартапа Нанотехнологии

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

Вот только с началом санкций даже такое простое лабораторное оборудование купить стало невозможно. Вот хороший пример: http://www.optimum-lab.ru/product/tajmer-laboratornyj/. Отличное лабораторное устройство, но как почти прямо пишет продавец - купить его сейчас не так и просто. Другой случай: https://www.chipdip.ru/product/at8n-24-240v-ac-dc. Не такая удобная и привлекательная разработка как предыдущий вариант, зато в наличии. Но стоит почему-то непотребно много, когда для такой задачи достаточно обычного реле и таймера. А этот вариант: https://www.chipdip.ru/product0/8002563209 совмещает нездоровую цену и нездоровые сроки поставки.

Читать далее
Всего голосов 40: ↑37 и ↓3 +34
Комментарии 44

Истории

Демосцена на релейном компьютере

Время на прочтение 3 мин
Количество просмотров 4.5K
Ненормальное программирование *Работа с видео *Assembler *Работа с 3D-графикой *Демосцена
Туториал

Какой компьютер без демосцены? Обратимся к классике от @Manwe_SandS@frog:

До моего визита на Assembly'99 я каждый pаз удивлялся pезультатам голосования на заpубежных demo party. Мне было непонятно, как столько людей могут отдавать голоса за pаботы состоящие из тупой (я пpошу пpощения, но это именно так) последовательности эффектов - плазмы, туннеля, огня, вpащающегося куба (тоpа) и пpочих подобных вещей, не объединенных никаким сюжетом, не несущими никакой идеи.

То что нужно! Возьмём первый попавшийся релейный компьютер и понаделаем эффектов.

Читать далее
Всего голосов 43: ↑43 и ↓0 +43
Комментарии 6

Реверс инжиниринг для самых маленьких на практике

Время на прочтение 11 мин
Количество просмотров 16K
Assembler *Реверс-инжиниринг *CTF *
Из песочницы

Скомпилированное приложение является «чёрным ящиком». Чтобы туда заглянуть, восстановить алгоритм работы применяется реверс‑инжиниринг. Это непростой навык с высоким порогом входа. В статье мы попробуем взять дизассемблер, несложную задачку и пойдём в бой. Материал будет полезен тем, кому хочется с чего-то начать и погрузиться в тему реверса.

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

Читать далее
Всего голосов 47: ↑47 и ↓0 +47
Комментарии 19

Процедурная генерация 3D-мешей для интро на 64 КБ

Время на прочтение 7 мин
Количество просмотров 3.8K
Программирование *C++ *Assembler *Работа с 3D-графикой *Демосцена
Перевод

В предыдущей статье [перевод на Хабре] мы рассказали, как генерируются текстуры в демо H – Immersion. На этот раз мы изучим ещё один важный инструмент для создания демо нужного размера — процедурную геометрию.

В частности, поскольку в нашем рендеринге используются традиционные полигоны, мы написали процедурный генератор мешей. Мы покажем, как благодаря тщательно подобранным методикам можно создать разнообразие форм или убедить в этом зрителя, как это сделали мы.
Читать дальше →
Всего голосов 32: ↑32 и ↓0 +32
Комментарии 3

Симулятор-Отладчик x86-кода

Уровень сложности Сложный
Время на прочтение 2 мин
Количество просмотров 2.3K
Assembler *Отладка *
Кейс

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

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

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

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

Читать далее
Всего голосов 24: ↑23 и ↓1 +22
Комментарии 19

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

Уровень сложности Простой
Время на прочтение 4 мин
Количество просмотров 12K
Assembler *Программирование микроконтроллеров *
Мнение

Некоторое время я был занят написанием простенького редактора для языка ассемблер под ARM Cortex семейства микроконтроллеров (подробности в моих статьях), и вот сейчас, поднакопив некоторый опыт как в части самого ассемблера так и способов написания программ в них решился на написание нового редактора.

Плюс еще подоспел интерес к RISC‑V архитектуре и было принято решением делать редактор который смог бы редактировать программы на ассемблере для различных архитектур (в том числе может быть и с лагеря AVR кто нить захочет присоединиться).

В общем подумалось: а что если попытаться создать asm‑base'д язык программирования который при выборе архитектуры просто бы транслировался автоматически в асм инструкции выбранной платформы?

Читать далее
Всего голосов 33: ↑24 и ↓9 +15
Комментарии 97

Эмоциональная история процессоров для первых компьютеров с 70-х до начала 90-х: AIM PowerPC

Уровень сложности Средний
Время на прочтение 13 мин
Количество просмотров 4.6K
Assembler *Компьютерное железо История IT Старое железо Процессоры
Обзор

В первой части были обзорно описаны многие разные процессоры до середины 90-х. Во второй части был обзор процессоров мейнфреймов IBM. Недавно мне предоставилась возможность немного попрограммировать для PowerPC, на основе чего появилась возможность добавить ещё одну часть к этим обзорам.

Читать далее
Всего голосов 29: ↑28 и ↓1 +27
Комментарии 10

Имплементация маппера MMC1 ассемблер 6502 nes/famicom/dendy

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

Игры не использующие мапперы в NES ограничены, 16 кб PRG ROM (хранилище программного кода) и 8 кб CHR ROM (хранилище графики). С развитием разработки игр на NES, встал вопрос, а как увеличить данные ограничения и на помощь пришли микросхемы мапперы. Что же такое мапперы мы и разберем сегодня и как их использовать в своем коде.

Читать далее
Всего голосов 22: ↑22 и ↓0 +22
Комментарии 4

Статус флаги ассемблера 6502 nes/famicom/dendy

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

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

Читать далее
Всего голосов 20: ↑18 и ↓2 +16
Комментарии 2

Assembler в Go: техники ускорения и оптимизации

Уровень сложности Сложный
Время на прочтение 8 мин
Количество просмотров 3.8K
Высокая производительность *Ненормальное программирование *Assembler *Go *

Привет, Хабр!

В прошлой статье я рассказывал об ускорении копирования элементов одного слайса в другой с помощью средств Go. В этот раз я решил пойти дальше и посмотреть, что можно достичь, начав разговаривать с процессором на его языке. Я выбрал одну из оптимизированных версий функции Copy в качестве объекта исследования из решения задачи VK Cup'22/23, которая копирует только синий компонент RGBA в Paletted картинку. Если интересно узнать как её ускорить почти в 10 раз, прошу под кат.

Читать далее
Всего голосов 30: ↑29 и ↓1 +28
Комментарии 1

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

Время на прочтение 98 мин
Количество просмотров 6.6K
Информационная безопасность *Assembler *Delphi *Разработка под Windows *


В статье будет рассмотрен один из методов поиска изменений в памяти процесса, на основе построения полной карты уязвимых к перехвату адресов. Рассмотрена работа со списками загрузчика, ручным разбором таблиц импорта/отложенного импорта/экспорта/TLS загруженных файлов, c обработкой форварда функций и ApiSet редиректов.
Будет показана методика доступа в 64 битное адресное пространство чужого процесса из 32 битного кода через статически сформированный ассемблерный шлюз, так и подход с применением автоматически генерируемого гейта.
Будет дано много комментариев «почему» применяется тот или иной подход, а также описание различных проблемных ситуаций, основанных в том числе как на собственном опыте, так и на разборе кода системного загрузчика, поэтому будет интересна и подготовленным специалистам.
Читать дальше →
Всего голосов 54: ↑54 и ↓0 +54
Комментарии 24

Вывод спрайтов, создание анимации, программирование nes/famicom/dendy

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

Ранее я уже писал статью о выводе спрайтовой графики на экрана с использованием регистра OAMDATA ($2004), но это подходит лишь для экспериментов и вывода некой статической картинки. Но движение либо анимация будет приводить к появлению различных артефактов наслоению спрайтов, моргание кадра, и так далее. Что бы этого избежать следует сформировать для каждого кадра буфер спрайтов и вывести на экран.

Читать далее
Всего голосов 8: ↑7 и ↓1 +6
Комментарии 0

Программирование assembler 6502 nes/famicom/dendy векторы прерывания, процедуры и их вызов

Уровень сложности Простой
Время на прочтение 2 мин
Количество просмотров 3.2K
Assembler *

Векторы прерывания в формате программирование на ассемблере 6502, можно представить как всем хорошо известный патерн event-observer в высокоуровневых языках программирования. Конечно же можно реализовать данный патерн и на ассемблере но я его привел для большего понимания работы вектора прерывания...

Читать далее
Всего голосов 11: ↑10 и ↓1 +9
Комментарии 17

Программирование nes/dendy скроллинг фона

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

Я несколько раз задавался вопросом а как сделать прокрутку фона как в марио или черном площе, и постепенно подобрался к выводу что надо перерисовать nametable динамически в момент аппаратной прокрутки. Объяснение и код как это сделано на ассемблере 6502 в данной статье.

Читать далее
Всего голосов 9: ↑8 и ↓1 +7
Комментарии 2

Ультра-маленькие демки под DOS

Время на прочтение 13 мин
Количество просмотров 9.6K
Программирование *Assembler *Системное программирование *
Туториал

В статье вы узнаете как сделать маленькие программы для MS-DOS на ассемблере, я покажу как рисовать 2D графику напрямую в видео-буфер. Может быть, вы даже вдохновитесь на создание собственного демо, которое будет ставить рекорды по размерам исполняемого файла.

Читать далее
Всего голосов 75: ↑74 и ↓1 +73
Комментарии 54

Что скрывают программы от отладчика?

Время на прочтение 2 мин
Количество просмотров 4.6K
Информационная безопасность *Assembler *Отладка *Реверс-инжиниринг *

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

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

Посмотрим, как справиться с противодействием отладке на примере 1337ReverseEngineer's The Junkrat https://crackmes.one/crackme/62dc0ecd33c5d44a934e9922 .

Посмотрим, что там
Всего голосов 20: ↑19 и ↓1 +18
Комментарии 5

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