Все потоки
Поиск
Написать публикацию
Обновить
71.83

Assembler *

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

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

Использование procmon от sysinternals для диагностики проблемных мест в исполняемом коде

Время на прочтение3 мин
Количество просмотров13K

Сразу хочу сказать, что это только демонстрация возможностей procmon для определения проблемных мест в программном обеспечении. 1С83 была выбрана для опытов из-за неочевидности способа поиска точки входа в процедуру проверки наличия установленных эмуляторов ключа. Она выполняется через различное время после старта порядка 3~10 мин, и вызывает появление окна «нарушение целостности системы» с последующим закрытием приложения. Я призываю всех использовать только лицензионное программное обеспечение. Рассматривать эту статью, как описание возможности взлома, нет смысла. Хотя бы потому, что 1С83 давно взломана и без меня. Любой 1с-ник за секунду вам скажет, как ее запустить без ключа.

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

Итак, ставим фильтр по имени процесса 1с.

Читать далее

Создание игр для NES на ассемблере 6502: скроллинг фона

Время на прочтение11 мин
Количество просмотров4.3K


Содержание:

  • Использование PPUSCROLL
  • Системы камер
  • Подготовка фонов к скроллингу
  • Реализация автоскроллинга
  • Логические фильтры
  • Подводим итог
  • Домашняя работа

Мы уже рассмотрели отрисовку и перемещение спрайтов, но фоны мы пока только отрисовывали. NES имеет возможность плавного скроллинга фонов с точностью до одного пикселя в кадр.
Читать дальше →

Сортировка массивов фиксированной длины с применением SIMD

Время на прочтение4 мин
Количество просмотров4.6K

Простая сортировка массива очень простая задача, в то время как эффективная сортировка очень сложная, во многом из-за простоты задачи.

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

Читать далее

Как мы делали Warface для Денди

Время на прочтение31 мин
Количество просмотров44K
В октябре 2020 мне написал мой друг Андрей Скочок, работающий в Mail.ru, и предложил сделать для них необычную промоакцию.

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



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

Создание игр для NES на ассемблере 6502: движение спрайтов

Время на прочтение12 мин
Количество просмотров4.5K


14. Движение спрайтов


Содержание:

  • Zero-Page RAM
  • Подпрограммы
  • Управление регистрами для подпрограмм
  • Наша первая подпрограмма: отрисовка игрока
  • Соединяем всё вместе
  • Домашняя работа

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

Создание игр для NES на ассемблере 6502: графика фона

Время на прочтение7 мин
Количество просмотров2.5K


13. Графика фона


Содержание:

  • Таблица паттернов фона
  • Составление таблицы имён
  • Таблица атрибутов
  • Дополнительные изменения
  • Использование проектов NES Lightbox
  • Домашняя работа

Прежде чем мы начнём перемещать спрайты по экрану, я хотел бы рассказать, как на NES работает графика фона. Мы изучили механику графики фона в Главе 9, а в этой главе мы рассмотрим код, необходимый для отображения фонов на экране.
Читать дальше →

Создание игр для NES на ассемблере 6502: ветвление и циклы

Время на прочтение11 мин
Количество просмотров4.1K


11. Ветвление и циклы


Содержание:

  • Управление потоком в языке ассемблера
  • Ветвление
  • Обзор опкодов циклов и ветвления
  • Ещё один пример ветвления
  • Выполнение сравнений
  • Использование сравнений в циклах

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

Создание игр для NES на ассемблере 6502: спрайтовая графика

Время на прочтение9 мин
Количество просмотров6K
image


10. Спрайтовая графика


Содержание:

  • Спрайтовые данные
  • Object Attribute Memory (OAM)
  • Работа с NES Lightbox
  • Отображение спрайтов в игре

Итак, мы рассмотрели устройство PPU на высоком уровне, и теперь готовы изучить подробности отрисовки спрайтов. К концу этой главы вы будете знать, как создавать тайлы спрайтов и отрисовывать их на экране.
Читать дальше →

Создание игр для NES на ассемблере 6502: Picture Processing Unit (PPU)

Время на прочтение7 мин
Количество просмотров4K
image


9. Picture Processing Unit (PPU)


Содержание:

  • Палитры
  • Таблицы паттернов
  • Спрайты
  • Фоны

«Игра» для NES состоит из трёх компонентов: отображаемой на экране графики, пользовательского ввода через какой-нибудь контроллер и звука для музыки и звуковых эффектов. Игра использует пользовательский ввод для изменения отображаемой графики и воспроизводимого звука, пока пользователь не отключит систему. В этой серии глав мы рассмотрим каждый из этих трёх компонентов, начав с того, как NES отображает графику.
Читать дальше →

Создание игр для NES на ассемблере 6502: рефакторинг

Время на прочтение5 мин
Количество просмотров5.4K


8. Рефакторинг


Содержание:

  • Константы
  • Файл заголовка
  • Импорт и экспорт ca65
  • Собственная конфигурация компоновщика
  • Соединяем всё вместе
Читать дальше →

Создание игр для NES на ассемблере 6502: заголовки и векторы прерываний

Время на прочтение12 мин
Количество просмотров5.7K


6. Заголовки и векторы прерываний


Содержание:

  • Заголовки iNES
  • Выделение процедур с помощью .proc
  • Векторы прерываний

В предыдущей главе мы разобрали часть «main» тестового проекта, которая задаёт цвет фона, а затем входит в бесконечный цикл. Однако этот код составляет всего 13 из 44 строк исходного кода тестового проекта. В этой главе мы изучим оставшуюся часть кода тестового проекта и узнаем ещё несколько опкодов.
Читать дальше →

Создание игр для NES на ассемблере 6502: оборудование NES и знакомство с ассемблером

Время на прочтение14 мин
Количество просмотров11K
image


4. Оборудование NES


Содержание:

  • Консоль
  • Картриджи
  • Как это связано с нашим тестовым проектом?
  • Цвета и палитры
  • Возвращаемся к тестовому проекту

Прежде чем приступать к разбору ассемблера, начнём с обзора самой NES.
Читать дальше →

Изучаем язык ассемблера на примере TSR программы под MS-DOS. Часть 1

Время на прочтение6 мин
Количество просмотров15K

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

Материал рассчитан на новичков в ассемблере, студентов, которым пришлось столкнуться с «динозавром» в виде MS-DOS, и может быть интересен тем, кто хочет немного узнать как функционировали операционные системы на заре своего существования.

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

Программа будет выполнять следующие функции:

– вывод текста вниз экрана по таймеру,

– переключение режима отображения шрифта: italic/normal,

– русификация,

– запрет на ввод прописных русских букв,

– резидентные часы,

– вывод бинарного представления символа.

Кто готов погрузиться в палеолит — погнали!

В палеолит

Ближайшие события

Создание игр для NES на ассемблере 6502: приступаем к разработке

Время на прочтение14 мин
Количество просмотров12K
image


2. Фундаментальные понятия


Содержание:

  • Работа с данными
  • Регистры процессора
  • Память
  • Как задаются данные
  • Как сделать данные человекочитаемыми
  • Соединяем всё вместе

Что такое компьютер?

Вопрос кажется простым, но он затрагивает самую суть того, что делаем мы как программисты. Пока скажем, что «компьютер» — это нечто, исполняющее программу. «Программа» — это просто последовательность команд, а под исполнением программы подразумевается, что команды выполняются с начала и одна за другой. (Если вы читаете программу и сами исполняете команды, то поздравляю! Вы — компьютер!)
Читать дальше →

Создание игр для NES на ассемблере 6502: краткая история NES

Время на прочтение12 мин
Количество просмотров11K

Введение


Осенью 1990 года родители подарили мне набор Nintendo Entertainment System Action Set: серую угловатую консоль (Control Deck), два контроллера, ярко-оранжевый световой пистолет "Zapper" и картридж, на котором были Super Mario Bros. и Duck Hunt.


Консоль NES с одним контроллером. Фото Эвана Эмоса.

Control Deck подключалась к стоявшему в чулане большому ЭЛТ-телевизору RF-переключателем — по сути, это была антенна, подававшая видеосигнал из консоли на телевизор на канале 3. Это была моя первая видеоигровая консоль, и я её обожал.

В том году я проводил в чулане много времени. Поначалу и отец тоже — он проходил Super Mario Bros., выяснял местоположение секретных Warp Zones и пытался проскользнуть через опасных Hammer Bro (прим. пер.: кидающихся молотками черепах). Однажды ему удалось победить Баузера («дракона», как он его называл) и спасти принцессу, после чего он практически перестал играть в игры на NES.
Читать дальше →

Ловля жуков в чемодане

Время на прочтение8 мин
Количество просмотров9.4K

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

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

И всё никак в толк не мог взять: это лыжи не едут, либо у меня проблемы с ассемблером.

Пробегался по каждой инструкции, стал сам линкером, уже как процессор начал всё исполнять, но ошибку в коде никак не мог найти. И вот тут начинается квест жёсткого аппаратного дебага и трёх недель бессонных ночей.
Читать дальше →

Анализируем bound checks в Go по CPU профилю

Время на прочтение9 мин
Количество просмотров4.9K

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


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

Ассeмблерные хаки из книги «xchg rax, rax»

Время на прочтение5 мин
Количество просмотров26K

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

Читать далее

Удаление Whitelist ноутбуков HP на примере HP Pavilion dv6-2135er

Время на прочтение5 мин
Количество просмотров20K

Удаление Witelist ноутбука HP Pavilion dv6-2135er. Реверс-инжиниринг и модификация дампа bios.

Читать далее

Знакомимся с программированием на ассемблере x86

Время на прочтение17 мин
Количество просмотров59K

Архитектура x86 лежит в сердце процессоров, на которых уже более трех десятилетий работают наши домашние компьютеры и удаленные серверы. Умение читать и писать код на низкоуровневом языке ассемблера – это очень весомый навык. Он позволяет создавать более быстрый код, использовать недоступные в Си возможности машин и выполнять реверс-инжиниринг скомпилированного кода.
Читать дальше →