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

Assembler *

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

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

Проклятые Земли. Изменяем движок игры! Подробности + ПРИМЕР реверсинга движка

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

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

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

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

Новости

Я мыслю MOV EAX, 1

Уровень сложности Простой
Время на прочтение 7 мин
Количество просмотров 6.1K

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

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

Как я писал свою первую игру для Dendy

Уровень сложности Средний
Время на прочтение 18 мин
Количество просмотров 8.1K

Что такое Dendy? Что так любит детвора? Это электронная игра! Ооо, дендиии...

В этой статье я вам расскажу о своем первом опыте разработки игры для NES/Famicom консоли. Постараюсь рассказать о инструментах, которые использовал и о интересных особенностях разработки игр для Dendy с которыми столкнулся во время создания игры.

Погрузиться в мир Dendy
Всего голосов 67: ↑67 и ↓0 +67
Комментарии 20

Перевод книги Windows APT Warfare

Уровень сложности Средний
Время на прочтение 12 мин
Количество просмотров 2K
image

Всем привет. Решил поделиться новостью, может кому-то будет интересно. Я закончил перевод книги Windows APT Warfare. В своем роде очень интересное чтиво, для тех кто занимается ассемблером, малварью и информационной безопасностью. Первую часть оставлю здесь. Всю остальную книгу можно забрать на дамаге, ныне — xss.is. Может кто-то сможет сверстать в PDF, буду очень благодарен. Всем спасибо.
Читать дальше →
Всего голосов 10: ↑10 и ↓0 +10
Комментарии 2

Истории

Оскар Толедо: потомственный волшебник

Уровень сложности Простой
Время на прочтение 7 мин
Количество просмотров 8.6K

Семья Толедо (пригород Мехико) и разнообразная техника их кустарного производства, в том числе компьютер, 1980 год

Оскар Толедо — пятикратный победитель программистского конкурса IOCCC, (Международный конкурс обфусцированного кода на С). Он интересен не только сам по себе, но ещё в контексте своей семьи. Это уникальные люди, которые скромно живут в пригороде Мехико и вообще не стремятся к известности. 25 лет назад они написали свою ОС, браузер и кучу софта для него.

Оскар Толедо — просто продолжатель семейного дела, которое началось примерно в 70-е годы прошлого века.
Читать дальше →
Всего голосов 66: ↑64 и ↓2 +62
Комментарии 8

Выделение регионов памяти в C++: советы и приёмы

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

Эта статья обсуждалась на Hacker News.

В течение минувшего года я шлифовал мой подход к выделению регионов. Практика показывает, что это эффективный, простой и быстрый подход; обычно его используют в качестве средства для сборки мусора без издержек. В зависимости от того, что нам требуется, в аллокаторе может быть всего 7–25 строк кода — идеально для случаев, когда мы работаем без среды исполнения. Теперь, когда я окончательно сформулировал ключевые аспекты моего подхода, самое время их задокументировать и рассказать вам о том, что мне удалось выучить. Определённо, это не единственный возможный подход к выделению регионов. Я просто расскажу вам о приёмах, которые сам выработал для упрощения программ и искоренения ошибок.

Регион (арена) — это буфер памяти и смещение до этого буфера. Изначально это смещение равно нулю. Чтобы выделить объект, нужно взять указатель на него с заданным смещением, увеличить смещение на размер объекта, а затем вернуть указатель. Этим дело не ограничивается — например, нужно обеспечить выравнивание и доступность. До этого мы ещё дойдём. Объекты не высвобождаются каждый по отдельности. Напротив, сразу высвобождаются целые группы ранее выделенных объектов, и смещение откатывается к более раннему значению. Когда не предусмотрены собственные времена жизни для отдельных объектов, деструкторы писать также не требуется, а вашим программам не приходится прямо во время выполнения обходить структуры данных и убирать ненужные. Кроме того, больше можно не беспокоиться об утечках памяти.

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

Assembler для Windows в Visual Studio

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

В этой статье я покажу как написать приложение для windows на ассемблере. В качестве IDE будет привычная многим Visual Studio 2019 со своими привычными плюшками - подсветка кода, отладка и привычный просмотр локальных переменных и регистров. Собирать приложение будет MASM, а значит, у нас будут и масмовские плюшки. Это будет полноценное оконное приложение с меню, иконкой, отрисовкой, выводом текста и обработкой мыши с клавиатурой.

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

Подробный разбор 64b nano game: snake64

Уровень сложности Сложный
Время на прочтение 12 мин
Количество просмотров 2.6K

Всем салют!

Очень приятно, что многим зашёл недавний разбор моего 64b intro: radar. Я рад, что у меня, наконец, дошли до этого руки. Лёд тронулся, господа присяжные заседатели.

На сей раз предлагаю вашему вниманию 64-байтовую игру «змейка», того же автора. Да, друзья, это самая компактная по размеру бинарного кода змейка из существующих (у меня даже есть 45-байтовая версия, но не такая симпатичная). И это именно та самая любимая многими вечно голодная змейка со старых мобильников, которая бегает по экрану и постоянно что‑то жуёт, увеличиваясь в длине.

Если вам не терпится поиграть прямо здесь и сейчас, только сегодня и только для вас я подготовил онлайн-версию, играйте на здоровье! Важно: для игры нужно использовать стрелки на цифровой клавиатуре.

Посмотреть что там...
Всего голосов 40: ↑40 и ↓0 +40
Комментарии 13

Подробный разбор 64b intro: radar

Уровень сложности Сложный
Время на прочтение 14 мин
Количество просмотров 10K

Да здравствует мыло душистое демосцена! И вам привет, дорогой читатель ;)

С демосценой я познакомился примерно 25 лет назад (или чуть больше). Но тогда это выражалось лишь в просмотре 128–256-байтовых интр (и демок, конечно же) с изумлением а‑ля: «А что так можно было?» Думаю, у многих знакомство с этой киберкультурой начинается похожим образом :). Если вам эти слова мало о чём говорят, почитайте о демосцене скудную статью на Вики, ну и/или послушайте подкаст, а также посмотрите что люди умудряются сделать, укладываясь всего лишь, например, в 256 байт кода (справа у большинства работ есть ссылка на видео YouTube).

Полноценные интры на любимом ассемблере x86 я начал писать только 5 лет назад, в 2018 году. Именно тогда я отправил на знаменитый фестиваль Chaos Constructions (который, кстати, организаторы обещают возродить в 2024) два прода (от слова «production»): 256b intro StarLine (заняла 1-е место) и 64b intro radar (заняла 6-е место в том же compo). После этого демосцена меня засосала стала частью моей жизни, в которую время от времени я с энтузиазмом погружаюсь.

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

Заглянуть за кулисы...
Всего голосов 105: ↑104 и ↓1 +103
Комментарии 35

Обзор языка программирования AsmX

Уровень сложности Простой
Время на прочтение 7 мин
Количество просмотров 19K

Краткий обзор основных возможностей языка AsmX. Указание ошибок работы для ускорения развития языка. Любая критика и ответы автора приветствуются.

Читать далее
Всего голосов 53: ↑47 и ↓6 +41
Комментарии 84

AsmX: Новые горизонты программирования и мощные инструменты

Уровень сложности Простой
Время на прочтение 5 мин
Количество просмотров 11K

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

AsmX имеет ряд возможностей.

Читать далее
Всего голосов 43: ↑5 и ↓38 -33
Комментарии 46

Архитектура и программирование Sony Playstation 1

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

По сравнению с другими, ранее описанными мной архитектурами, архитектура Sony Playstation 1 (PSX) - сравнительно современная. И дело даже не в годе выпуска (1994) - скорее это общее ощущение сочетания новых возможностей и исчезновения привычных старых, которые были типичными для компьютеров и приставок предыдущей эпохи.

PSX (это сокращение пошло от первоначального названия проекта - Playstation X) имеет в качестве центрального процессора MIPS R3000, работающий на частоте 33МГц. Причём, Sony отказалось от сопроцессора для вычислений с плавающей точкой и вместо него сопроцессором в PSX является так называемый GTE (Geometry Transformation Engine), выполняющий различные операции с фиксированной точкой над векторами и матрицами.

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

Lua FFI

Уровень сложности Средний
Время на прочтение 20 мин
Количество просмотров 2.4K
Под катом описание довольно примитивного FFI для Lua под Win_x64.

Но который, тем не менее, позволяет делать:

local ffi = require ("ffi")
local msg = ffi("user32.dll", "MessageBoxA")
msg(0, "Message", "Title", 0)

или взять, например glfw3.dll, и путём

local glfw = ffi("glfw3")

сделать все экcпортируемые библиотекой glfw3.dll функции доступными для вызова из Lua.

Размер самой ffi.dll при этом получился аж 9 Кбайт, вот она целиком на картинке размером 32х96 пикселей. Можно сохранить это изображение, сконвертировать в bmp (хабр не умеет в bmp, пришлось дополнительно упаковать в png), потом руками удалить первые 54 байта заголовка (до 'MZ') и пользоваться.


Но очень осторожно, так как в результате всё-таки получилось, что в аккуратную детскую песочницу Lua залезли грязными сапогами, притащили туда всякие небезопасные штуки из С, вроде ручного управления памятью и обращения с указателями вида *(double*) (void * ptr), и вообще использование таких вещей учит всякому нехорошему.

Тут недавно выходил ряд статей про «вредные советы» в программировании «60 антипаттернов для С++ программиста». Под катом можно найти практическое воплощение большинства из них, не всех конечно, но только потому, что не все из них применимы к С, без плюсов :)
Читать дальше →
Всего голосов 14: ↑14 и ↓0 +14
Комментарии 6

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

Битва пет-проектов
Дата 25 сентября – 30 ноября
Место Онлайн
Вебинар «Разработка бэкенда на Clojure»
Дата 24 октября
Время 20:00 – 21:30
Место Онлайн
True Tech Champ
Дата 24 октября
Время 9:00 – 17:00
Место Москва Онлайн
Russia Risk Conference 2023 — 19-я конференция по риск-менеджменту
Дата 25 – 26 октября
Время 10:00 – 19:00
Место Москва Онлайн
VK Инклюзия’23
Дата 27 октября
Время 14:00 – 21:30
Место Москва Онлайн
HolyJS
Дата 2 – 12 ноября
Время 15:00 – 19:00
Место Санкт-Петербург Онлайн
IT Recruiting – HR Forum 2023
Дата 8 – 10 ноября
Время 9:00 – 18:00
Место Москва
Онлайн IT HR-конференция HR42
Дата 17 – 18 ноября
Время 10:00 – 14:00
Место Онлайн
HighLoad++ 2023
Дата 27 – 28 ноября
Время 9:00 – 20:00
Место Москва Онлайн

Assembler 6502 переключение CHR мапером MMC3

Уровень сложности Средний
Время на прочтение 8 мин
Количество просмотров 774

Одна из ключевых функций мапперов это переключить программных банков памяти и банков памяти с графикой CHR. Если брать для сравнение маппер MMC1 то он переключает графику постранично, по факту переключая полностью. MMC3 имеет 5 банков CHR памяти и позволяет их переключать по отдельности, не переключая полностью pattern table. Под катом подробности как это реализовать на ассемблере...

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

assembler 6502 (nes, famicom, dendy), миграция с мапера MMC1 на MMC3 прерывание IRQ

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

Не так давно я задумался о том что, неплохо бы было сделать своей игре статус бар в низу экранной области. Алгоритм sprite 0 hit отпал практически сразу ввиду того что в проекте есть уже довольно сложные и тяжелые механики и данная механика нагрузит выполнение nmi вектора. По этому было принято решение использовать прерывание IRQ, а такое прерывание может генерировать распространенный маппер MMC3, на который я и решил мигрировать свой код.

Читать далее
Всего голосов 13: ↑12 и ↓1 +11
Комментарии 7

Правильный if для ускорения работы

Уровень сложности Средний
Время на прочтение 7 мин
Количество просмотров 25K

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

Читать далее
Всего голосов 27: ↑25 и ↓2 +23
Комментарии 12

«Пиратим» Google Chrome для Microsoft Windows 7

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

Привет, Хабр!
Возможно, здесь стоило написать какое-то длинное лирическое вступление или порассуждать о морально-этической части «пиратства» продукции крупнейших корпораций, ну или хотя бы просто сказать что это моя первая статья в Вашем сообществе. Но, к сожалению, даже не задумывался над всем этим и поэтому переедем сразу к делу и по существу.

На абордаж!

Читать далее
Всего голосов 131: ↑119 и ↓12 +107
Комментарии 122

Анализирую прошивки контроллеров Schneider Electric

Уровень сложности Простой
Время на прочтение 6 мин
Количество просмотров 5K

Промышленные контроллеры играют большую роль в промышленности любой страны - транспортировка энергоресурсов, производственные линии на заводах, множество локальных систем управления (водоснабжение, вентиляция и т.д.). А не возникал у вас вопрос - а на чем всё это работает: какие процессоры, ОС, технологии применяются производителями? Основная проблема в том, что даже на сайте производителя чаще всего нет никакой информации, из-за чего приходится лезть в прошивки.

На Хабре, да и в целом русском сегменте интернета, очень мало уделяется внимания данной теме, поэтому постараюсь на сколько мне хватило знаний поведать, что я выяснил за эту неделю отпуска. Производитель выбран исходя из популярности и частого упоминания в списках CVE.

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

Дифференциальная сеть — формальная система для формальных систем

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

Сколько раз при изобретении очередного метода обработки структурированных данных наталкиваешься на мысль о дежавю? Работа со списками файлов, словарями имен, объектными полями, связывание разнотипных данных. В каждом новом более удобном или более быстром переизобретении проглядывается что-то общее, непреходящее. Концептуальное ядро, связующее все возможные производные множества и включающее их в свою орбиту. Что-то чему язык затрудняется сходу подобрать название, а мозг очертить предельные границы. Одновременно всеобъемлющая и при этом неуловимо малая деталь. Абсолютная абстракция. Линейный примитив.

Читать далее
Всего голосов 5: ↑4 и ↓1 +3
Комментарии 10

Релейный компьютер, телетайп и интересный алгоритм игры в крестики-нолики

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

Крестики-нолики – классическая игра, которую наверное пытался написать каждый. При этом программы иногда получаются довольно запутанные, несмотря на простоту правил. Электромагнитные реле – классическая элементная база для компьютеров и калькуляторов. Они тёплые, ламповые и прикольно щёлкают. Если добавить к этому телетайп, то получится игровая консоль в стиле 1940х.

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

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