Как стать автором
Обновить
  • по релевантности
  • по времени
  • по рейтингу

Графический «велосипед» по мотивам Turbo Vision (дела давно минувших дней)

Ненормальное программированиеПрограммирование
Из песочницы
Относительно недавно, прочитав местную статью "Демо, которых никто никогда не видел", решил, что тоже стоит пролить свет на некоторые плоды своей программистской молодости.

Начиналось с этого:
image

Под 'катом' 500Кб картинок!!!
Всего голосов 167: ↑163 и ↓4 +159
Просмотры10K
Комментарии 80

Ассемблер: прячем несколько команд в команде

Ненормальное программированиеAssembler
Из песочницы
image
Речь пойдёт о том, как можно спрятать «лишние» ассемблерные команды в обычном коде. Данный метод полезен для усложнения дизассемблирования кода, особенно, если генерацию «скрытых» команд автоматизировать.
Инструментарий: отладчик OllyDbg.

Странный странный код


Взглянем на следующий код, в котором скрыто намного больше команд, чем видно на первый згляд:
MOV EAX,1EBC031
MOV EBX,90DB3190
CMP EAX,EBX
JNE SHORT 0000009E
NOP
Читать дальше →
Всего голосов 128: ↑122 и ↓6 +116
Просмотры5.4K
Комментарии 37

Программирование PIC16f886. Игра «Камень, ножницы, бумага»

Assembler
Из песочницы
image
Эта статья направлена на новичков в изучении программирование семейства pic-контроллеров на базе языка assembler. Я взял за основу микроконтроллер pic16f886. Для программирование и моделирования использовались соответственно программы MPlab IDE (Microchip) и Proteus (Labcenter)
Читать дальше →
Всего голосов 27: ↑21 и ↓6 +15
Просмотры3K
Комментарии 16

ASM в Unix

*nix
Из песочницы
Recovery mode
Конечно же ассемблер под юникс отличается от ассемблера под доc или виндоуз. В то время как в асме под эти операциоyные системы использовался синтаксис навязанный интеллом, изобилующий разными неопределенностями (неоднозначностями, если хотите), решающимися за счет приведения типа (byte ptr, word ptr, dword ptr), в асме под никс использовался сиснтексис AT&T и SysV/386, который разрабатывался специально для устранения неоднозначности толкования команд. Конечно же существуют ассемблеры, под юникс с интелловским синтаксисом, такие как NASM, но в данной статье будет рассмотрен синтаксис ассемблеров стандартных для данной платформы.
Читать дальше →
Всего голосов 41: ↑22 и ↓19 +3
Просмотры10.6K
Комментарии 16

Записи и наброски в старых тетрадях (привет из 90-х)

Разработка веб-сайтов

Привет! Совсем недавно разбирался на даче и нашел пару тетрадей, блокнотиков и листочков с приветом из славных 90-х. Перенесемся на время в 96 год. Итак, я школьник, учусь в 8-ом классе. Дома гордо красуется ПЭВМ «Поиск». После работы он аккуратно накрывается тряпочкой. Там MS-DOS 5.0 на дискетке вместе с debug.exe. Позднее появляются Norton Utilites с красивым интерфейсом, Norton Commander. Ну, игрушки конечно тоже есть.

Читать дальше →
Всего голосов 220: ↑185 и ↓35 +150
Просмотры7.5K
Комментарии 68

Как воровать бензин с помощью Ассемблера (основано на реальных событиях)

Assembler


Приветствую тебя, хабрачитатель!

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

Читать дальше →
Всего голосов 431: ↑390 и ↓41 +349
Просмотры72.8K
Комментарии 155

Изучаем MIPS-ассемблер

Assembler


Как говорит Википедия, MIPS – микропроцессор, разработанный компанией MIPS Computer Systems (в настоящее время MIPS Technologies) и впервые реализованный 1985 году. Существует большое количество модификаций этой архитектуры, созданных специально для 3D-моделирования, быстрой обработки чисел с плавающей запятой, многопотоковых вычислений. Различные варианты этих процессоров использутся в роутерах Cisco и Mikrotik, смартфонах, планшетах и игровых консолях.

Инструкции MIPS достаточно просты для понимания, и именно с него рекомендуется начинать изучение ассемблера. Чем сейчас, собственно, и займёмся.
Читать дальше →
Всего голосов 71: ↑67 и ↓4 +63
Просмотры47.2K
Комментарии 20

Максимально точное измерение кода

C++AssemblerC
Tutorial

В моей статье полугодичной давности о длинной арифметике есть замеры скорости (throughput в тактах) очень коротких фрагментов кода — всего по несколько инструкций. Методика измерения была кривовата, но давала правдоподобные результаты. Потом выяснилось, что результаты таки неверные — поверхностный подход всегда сказывается.

В этом посте я опишу надежный метод «нанобенчмаркинга» с минимальной погрешностью и без подключения специальных библиотек и драйверов, к которому в итоге пришел. Применимость: сравнение однопоточного потенциала процессоров, просто интерес.
Читать дальше →
Всего голосов 32: ↑29 и ↓3 +26
Просмотры21K
Комментарии 36

ARM NEON скининг

AssemblerРазработка игр

Что это?


Что такое ARM NEON? – ARM® NEON™ это SIMD движок … – другими словами это расширенный набор инструкций наподобие x86 CPU SSE/SSE2 но для процессоров с ARM архитектурой.

Зачем?


Всё и так было хорошо пока я не добавил поддержку FSAA. После этого фпс просел ниже чем 15.
После оптимизации у меня опять было около 25 FPS. Но в памяти засела одна функция которая потребляла 10% времени на кадр в которой я уже не знал что можно оптимизировать.

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

Оригинальный код на C для скининга (Matrix palette skinnig).


Осторожно!!! Много непонятного кода, очень непонятного
Всего голосов 14: ↑10 и ↓4 +6
Просмотры20.5K
Комментарии 19

Анализ keygenme от Ra$cal на базе виртуальной машины

Assembler

0. Инфо


Страница KeygenMe на crackmes.de
Crackme with simple vm. Key check algorithm is simple, so main target — vm.
difficult of pcode is growing from start to end. first part seems like emulator, but then it looks like like machine with another logic, registers, commands =)
Good luck and have fun.
Difficulty: 4 — Needs special knowledge
Platform: Windows
Language: C/C++
Читать дальше →
Всего голосов 49: ↑40 и ↓9 +31
Просмотры10.5K
Комментарии 5

Простая программа на ассемблере x86: Решето Эратосфена

Assembler
Tutorial

Вступительное слово


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

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

До ее написания я сформулировал такие требования к будущей программе:
  • Моя программа не должна быть программой под DOS. Слишком много примеров ориентировано на нее в связи с простым API. Моя программа обязательно должна была запускаться на современных ОС.
  • Программа должна использовать кучу – получать в свое распоряжение динамически распределяемую память.
  • Чтобы не быть слишком сложной, программа должна работать с целыми беззнаковыми числами без использования переносов.

Задачей для своей программы я выбрал поиск простых чисел с помощью Решета Эратосфена. В качестве ассемблера я выбрал nasm.

Код я писал с упором больше на стиль и понятность, чем на скорость его выполнения. К примеру, обнуление регистра я проводил не с помощью xor eax, eax, а с помощью mov eax, 0 в связи с более подходящей семантикой инструкции. Я решил, что поскольку программа преследует исключительно учебные цели, можно распоясаться и заниматься погоней за стилем кода в ассемблере.

Итак, посмотрим, что получилось.
Читать дальше →
Всего голосов 47: ↑40 и ↓7 +33
Просмотры94.2K
Комментарии 25

Первая игра, которую я просто написал для себя

Ненормальное программированиеDelphi
Пост ностальгии по игрушкам, которые мы сами для себя писали в детстве.
Лазая по просторам App Store ища очередную игрушку для своего айпада, наткнулся на старинную игрушку “Братья Пилоты”. Сразу купил, поставил и прошёл на одном дыхании (уже наверное в 3 раз). Но более всего задержался на эпизоде с холодильником. Уж больно меня прёт эта головоломка.



И внезапно вспомнил, что ещё в школьные годы, после прохождения холодильника, головоломка меня так накрыла, что я написал на паскале свою собственную игрушку — эмулятор головоломки. Но не просто повторяла исходную игру, а позволяла выбирать размер поля, имела хелп, возможность сохранения и продолжения игры с прошлого места после выхода.

Подняв старые бекапы я нашёл исходную игру. Запустил её в dosbox и пропал для внешнего мира на пару часов.
Читать дальше →
Всего голосов 137: ↑123 и ↓14 +109
Просмотры70.5K
Комментарии 116

Реализация Задержки в AVR assembler без таймеров

Assembler
Из песочницы
А зачем?

Переходя с Си на ассемблер (нужда появилась) обнаружил для себя плохую вещь, на нем нет любимой функции _delay_ms(long millisecond) (поиск в интернете ничего не дал, может искал плохо), писать 8000 пустых команд (для 8 Мгц чтобы 1 мс удержать) конечно бред, отсюда появилась идея написать свой Delay.
Читать дальше →
Всего голосов 11: ↑7 и ↓4 +3
Просмотры39.5K
Комментарии 19

Взламываем игру-головоломку «Сапер»

AssemblerОтладка
Из песочницы
Intro

Холодным зимним вечером, начитавшись статей об исследовании различного ПО и насмотревшись различного рода видео про взломы игр и прочее, у меня вдруг тоже возникло желание повозиться под дебагерром с чем-нибудь интересным. Крякингом я занимаюсь сравнительно давно, поэтому практический опыт имеется. Поначалу я, как и многие, просто искал различные CrackME в сети и взламывал их с целью обучения, затем перешел на взломы платных приложений(поиск/подбор ключей) и написание различного рода KeyGen`ов. В данный момент «набиваю руку» и пытаюсь оттачивать мастерство взлома.
Ну да ладно, это лирическое отступление от сути. Теперь определимся с некоторыми деталями.

В данной статье главным объектом внимания для нас будет компьютерная игра «Сапер».
Исследование и последующая отладка приложения происходят под Windows 7 x64 (реализация игры «Сапер» отличается в различных версиях OS Windows).
Читать дальше →
Всего голосов 103: ↑82 и ↓21 +61
Просмотры32.5K
Комментарии 40

Исследование игры-головоломки «Сапёр» (продолжение)

Информационная безопасностьAssembler
Продолжаем наше исследование игры «Сапёр» от Microsoft.

Данная статья является продолжением первой статьи.

О чем будет идти речь:
1) Взлом, основанный на переполнении буфера
2) Взлом игровых мин
3) Исследование архитектуры игры.

I

Откроем игру, следом за ней CE( Cheat Engine ). Присоединяемся к процессу игры:

image

Читать дальше →
Всего голосов 51: ↑35 и ↓16 +19
Просмотры14.6K
Комментарии 22

KolibriOS вышла на Kickstarter, чтобы провести свой Summer of Code

Assembler
KolibriOS — открытая операционная система, основанная на MenuetOS (форк произошел в 2004 году), требующая всего 8 МБ ОЗУ для запуска и разрабатываемая русской командой разработчиков исключительно на языке ассемблера. Её дистрибутив занимает одну 1.44 МБ-дискету и, тем не менее, включает в себя текстовый редактор, программу для просмотра изображений, браузер, набор из 30+ игр, различные тесты, системные и прикладные утилиты. Полностью поддерживается FAT12/16/32, в режиме чтения — NTFS, ISO9660 и Ext2/3/4. Написаны драйверы для популярных звуковых, сетевых и графических карт.

В этом году администраторы проекта подали заявку участие в Google Summer of Code 2013, но их предложение было отвергнуто. Причем Google написали, что им нравится проект, но из-за ограниченного бюджета они не могут принять всех из 416 претендентов. Поскольку список нововведений KolibriOS, которые планировалось реализовать на GSoC '13, довольно обширный, и уже внесен в некотором смысле в планы разработки, было решено организовать свой SOC. Поскольку проект некоммерческий, а на донейтной основе маленькому проекту пока что сложно быстро собирать финансирование, разработчики выбрали Kickstarter. Кампания была запущена 3 дня назад, из £5,000 пока что собрано свыше 20%. Сбор средств закончится 31 мая.

Вы можете скачать KolibriOS и решить, стоит ли поддерживать проект, на этой странице: kolibrios.org/ru/download.htm
Адрес Kickstarter-кампании: www.kickstarter.com/projects/kolibrios/kolibrios-help-us-hold-our-own-summer-of-code-2013
Читать дальше →
Всего голосов 97: ↑89 и ↓8 +81
Просмотры51.6K
Комментарии 100

Портирование кода на мобильные устройства iOS/Android

Блог компании Mail.ru GroupРазработка под iOSРазработка под Android
Что вам кажется привлекательней: сталкиваться с новыми интересными задачами и разрабатывать нетривиальные алгоритмы или переписывать с одного языка на другой уже существующую логику и воевать со странными особенностями конкретных API? Я занимаюсь мобильной разработкой уже лет 8, и, не раздумывая, выбираю первый вариант, но и повоевать с API тоже люблю. Тем, кто со мной согласен, но еще не знает, как заниматься первым и сводить к минимуму второе, будет интересно заглянуть под кат.

Читать дальше →
Всего голосов 48: ↑43 и ↓5 +38
Просмотры19.6K
Комментарии 16

Assembler для Brainfuck

Ненормальное программированиеBrainfuck
Из песочницы
Одним холодным майским днем от скуки решил я таки приступить к изучению этого удивительного языка — Brainfuck'a.
Его интерпретаторы публиковали на Хабре уже очень много раз.
Но мне хотолось изучить поглубже сам язык и алгоритмы на нем, а не писать очередной интерпретатор. Поэтому было решено сделать из мухи слона компилятор какого-нибудь высокоуровневого языка в brainfuck.
Однако очень быстро начался реальный brainfuck: отсутствие оператора if, отсутствие произвольного доступа к ячейкам и куча других проблем сразу свалилась на меня. Пришлось повременить с высокоуровневым языком и сделать для начала ассемблер, в который и будет компилироваться высокоуровневый язык.
О реализации ассемблера под катом.
Читать дальше →
Всего голосов 44: ↑42 и ↓2 +40
Просмотры21.5K
Комментарии 12

Подмена обработчика системного вызова

Assembler
Из песочницы
Всем доброго времени суток! Я студентка-второкурсница технического ВУЗа. Пару месяцев назад пришла пора выбирать себе тему курсового проекта. Темы типа калькулятора меня не устраивали. Поэтому я поинтересовалась, есть ли что-нибудь более интересное, и получила утвердительный ответ. «Подмена обработчика системного вызова» — вот моя тема.

Введение

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

Зачем?

Главная цель, пожалуй, наглядно на рабочей системе посмотреть как оно работает, а не «грызть» сухую теорию. Ну, или как раньше программисты пытались «делать многозадачность» в DOS, переопределяя обработчик событий таймера.
Читать дальше →
Всего голосов 52: ↑47 и ↓5 +42
Просмотры8.6K
Комментарии 32

Разбираемся в С, изучая ассемблер

AssemblerC
Tutorial
Перевод статьи Дэвида Альберта — Understanding C by learning assembly.

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

Уровни абстракции — отличные инструменты для создания вещей, но иногда они могут стать преградой на пути обучения. Цель этого поста — убедить вас, что для твердого понимания C нужно также хорошо понимать ассемблерный код, который генерирует компилятор. Я сделаю это на примере дизассемблирования и разбора простой программы на С с помощью GDB, а затем мы используем GDB и приобретенные знания ассемблера для изучения того, как устроены статические локальные переменные в С.
Читать дальше →
Всего голосов 76: ↑70 и ↓6 +64
Просмотры76.2K
Комментарии 30