Главная » Архив меток: Assembler

Архив меток: Assembler

[Из песочницы] Байт-машина для форта (и не только) по-индейски

Начну по порядку. Да-да, именно «байт» и именно по индейски (не по индийски). А когда-то давным-давно я развлекался тем, что писал форт-системы. В последнее время тут, на Хабре, стали появляться статьи о байт-коде. Они были 16-ти разрядными. Конечно, на ассемблере. Даже с 32 поиграться не удалось. На x86-64 никогда не программировал. Почему бы не замутить 64х разрядный форт, да ещё ...

Читать далее »

Решаем crackme от Лаборатории Касперского

В один прекрасный день разные каналы в телеграмме начали кидать ссылку на крэкмишку от ЛК, Успешно выполнившие задание будут приглашены на собеседование!. После такого громкого заявления мне стало интересно, насколько сложным будет реверс. О том, как я решал этот таск можно почитать под катом (много картинок).Придя домой, я еще раз внимательно перечитал задание, скачал архив и стал смотреть, что же ...

Читать далее »

Как собрать Apple 1 и написать для него игру

Как собрать Apple 1 и написать для него игру  Сегодня его возможности не дотягивают даже до простых микропроцессорных устройств или микроконтроллеров. Прошло 40 лет с момента выхода в свет компьютера Apple 1. Предлагаю читателю вместе со мной собрать Apple 1, чтобы узнать, что же интересного в нём было, и написать какую нибудь программу. Но в 1976-ом году эта новинка ...

Читать далее »

[Из песочницы] Написание простого процессора и окружения для него

В этой статье я расскажу какие шаги нужно пройти для создания простого процессора и окружения для него. Здравствуйте! Важны такие параметры как: Для начала нужно определиться с тем, каким будет процессор. Архитектуры процессоров можно разделить по размеру инструкций на 2 вида (на самом деле их больше, но другие варианты менее популярны): Их инструкции простые и выполняются сравнительно быстро, тогда как ...

Читать далее »

[Перевод] Введение в ptrace или инъекция кода в sshd ради веселья

Конечно, это несколько искусственная задача, так как есть множество других, более эффективных, способов достичь желаемого (и с гораздо меньшей вероятностью получить SEGV), однако, мне показалось клёвым сделать именно так. Цель, которой я задался, была весьма проста: узнать введённый в sshd пароль, используя ptrace. Те, кто знаком с инъекциями в Windows, наверняка знают функции VirtualAllocEx(), WriteProcessMemory(), ReadProcessMemory() и CreateRemoteThread(). Эти вызовы ...

Читать далее »

Виртуальный мир Intel. Часть 2: SMP

В предыдущей статье(ссылка) я рассказал о базовой концепции гипервизора, основанного на технологии аппаратной виртуализации Intel. Теперь же я предлагаю расширить возможности гипервизора добавив поддержку многопроцессорной архитектуры (SMP), а также рассмотреть пример того, как гипервизор может вносить изменения в работу гостевой ОС. Все дальнейшие действия будут проводится на PC со следующей конфигурацией: CPU: Intel Core i7 5820KMotherboard: Asus X99-PRORam: 16GBГостевая ОС: ...

Читать далее »

[Из песочницы] The Kernel-Bridge Framework: мостик в Ring0

Хотели ли Вы когда-нибудь заглянуть под капот операционной системы, посмотреть на внутреннее устройство её механизмов, покрутить винтики и посмотреть на открывшиеся возможности? Возможно, даже хотели поработать напрямую с железом, но считали, что драйвера — rocketscience? Предлагаю вместе пройтись по мостику в ядро и посмотреть, насколько глубока кроличья нора. А также, набор юзермодных и ядерных API и обёрток для быстрой и ...

Читать далее »

Low-level Brainfuck

Building a Brainfuck translator in TurboAssembler. To begin with, we will write an interpreter in a high-level language, for example, in Pascal. Let's write a program that outputs a character whose ascii-code corresponds to the number of + Therefore, we only need the bf-commands + and . var data_mem: array[1..10] of integer; // data array command_mem: string; // command array ...

Читать далее »

[Перевод] Загрузка ядра Linux. Часть 1

От загрузчика к ядру Я написал несколько статей о программировании на ассемблере для x86_64 Linux и в то же время начал погружаться в исходный код ядра Linux. Если вы читали предыдущие статьи, то знаете о моём новом увлечении низкоуровневым программированием. Итак, я решил написать еще одну серию статей о ядре Linux для архитектуры x86_64. Мне очень интересно разобраться, как работают ...

Читать далее »

Что происходит за кулисами С#: основы работы со стеком

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

Читать далее »