Как читать машинный код
Пугаться этого не следует. На самом деле, для программирования под Windows требуется весьма ограниченный набор инструкций, и скоро мы сможем в этом убедиться. Мы будем изучать нужные нам инструкции по мере необходимости. А сейчас кратко рассмотрим "суть" программирования в машинных кодах, а она довольно проста. Как бы то ни было, но и в компьютерной индустрии постепенно развилась особая субкультура низкоуровневого программирования. Долгое время она варилась в собственном соку, оставаясь достоянием узкого круга посвященных, интенсивно осмысливавших накопленные знания. Вероятно, был пройден некий порог, и мы вплотную приблизились к моменту, когда начинает зарождаться элитарное штучное ручное производство и в данной высокотехнологичной области. И делать это, естественно, могут лишь специалисты высочайшей квалификации, понимающие значение каждого используемого байта. Сейчас отметим лишь, что возможна еще и косвенная адресация, когда адрес операнда в памяти находится в регистре, а инструкция ссылается на соответствующий регистр. Этот байт следует непосредственно за опкодом, который предполагает его использование, и содержит следующие поля: В последнем случае адрес памяти, по которому находится операнд, вычисляется следующим образом см. Вот с этой целью и появилась задумка систематически рассмотреть с уровня машинных кодов работу наиболее популярной ОС - Windows, чтобы это оказалось доступным самому широкому кругу заинтересовавшихся читателей - от простых пользователей до искушенных программистов. Это и программирование, и изучение работы ОС "изнутри", причем проводимое без всяких посредников в виде языков программирования, вспомогательных библиотек и сред разработки, напрямую, "как есть" в самой ОС. Но сейчас самые дорогие и качественные машины опять собирают вручную! А разве механические часы исчезли с появлением электронных? Напротив, стали только качественнее и дороже. А когда их сравнивают с электронными, последние презрительно именуют "штамповкой". И как сравнить массовую бижутерию с синтетическими камнями с филигранной ювелирной работой?.. Не надо бояться окунуться в джунгли машинных кодов. На самом деле, здесь уже есть и проторенные дороги, и тайные заветные тропинки - надо всего лишь их знать и уметь по ним ходить. И я хочу просто показать, как это можно сделать; а уж каждый пусть сам сравнивает, оценивает и решает, сложно это или элементарно, нужно это ему или нет - это будет осознанный выбор, основанный на его собственных знаниях и опыте , а не на чьих-то стереотипах из прошлого. Как когда-то великие путешественники-первопроходцы открывали новые земли, кодеры исследуют бурно разросшееся виртуальное пространство информационных технологий. Несмотря на то, что ее создавали сами люди, эта матрица нашего времени стремительно развивается по каким-то своим законам. Накопились огромные пласты неосвоенных знаний. Только в меню "Вид" калькулятора установите "Научный", и в верхнем ряду слева увидите 4 кнопки-переключателя "Hex", "Dec", "Oct", "Bin", которыми и нужно пользоваться. Windows сильно упрощает программирование - это относится к машинным кодам в значительно большей степени, чем к любому языку программирования на высоком уровне обстоятельство, которое упускают из виду противники низкоуровневого программирования. Для программирования под Windows нам вполне достаточно рассматривать процессор, как обычный калькулятор. Что ж, пора перейти от вступлений к сути. Одна из самых примечательных особенностей этих процессоров - формат команды с переменным размером. Однако для дальнейшего развития в этом направлении нужно не только ознакомить более широкую аудиторию с накопленным в узких кругах опытом, но и развенчать некоторые уже устаревшие стереотипы наподобие того, что современные системы программировать на низком уровне невозможно вообще. Начнем с команды, которая перемещает непосредственное значение являющееся частью самой инструкции в регистр общего назначения. В архитектуре IA используется так называемый "little-endian" порядок следования байтов его называют обратным: Подробнее об этом поговорим в следующей статье, а пока пример: B8 01 00 00 Но в общем случае это не так. Зато есть другой характерный бит - d direction , указывающий направление перемещения данных - из памяти в регистр 0 или из регистра в память 1. Можно сказать, информационные технологии проходят сейчас период массового производства, как когда-то автомобильная и другие виды промышленности. Конвейер штампует однотипные универсальные изделия. Но посмотрите на исторические тенденции. Сначала автомобили собирали поштучно. ГиперХост — хостинг сайтов который Вы искали. Компания Apple открыла ядро и системные компоненты macOS Win32 в машинных кодах Рустэм Галеев aka Roustem Содержание 1. Введение в машинные коды для Win32 2. Исполняемые файлы Windows 4. Главная функция окна Шаблон оконного приложения 1. Введение в машинные коды для Win32 Мир машинных кодов для процессоров Intel IA захватывающий и фантастический. Развилась целая философия "быстрой разработки приложений" - своего рода "информационный фастфуд". Но разве может забегаловка заменить собой изысканный ресторан? Для работы специально будут использоваться простейшие и даже примитивные инструменты, входящие в состав любой версии Windows от 95 до XP и даже Server - любой, кто захочет, сможет повторить описываемые эксперименты на самом обычном компьютере. Хочу добавить пару слов о пользователях, никогда до этого не программировавших. Идея научить их программировать - причем сразу в машинных кодах и сразу под Windows - может, и несколько авантюрная даже многие низкоуровневики отнеслись к ней скептически , тем не менее, мне кажется, это вполне посильная задача. Есть еще два регистра, с которыми придется иметь дело: Состояние регистра флагов может меняться после каждой инструкции в зависимости от полученного результата; подробнее об этом поговорим в другой раз. Регистр EIP содержит адрес начала следующей инструкции в памяти. Его значение увеличивается каждый раз, когда из памяти извлекается для исполнения очередная инструкция, на величину размера этой инструкции. Обрабатываемые инструкцией данные могут находиться не только в регистре, но и в памяти, а также входить в состав самой инструкции. Полезные продукты и сервисы для e-commerce проектов Обзор продуктов и сервисов, полезных для e-commerce проектов Прием онлайн-заявок на консультацию юриста по недвижимости в Москве Продукты и сервисы, полезные для владельцев e-commerce проектов Обзор продуктов и сервисов для e-commerce проектов. PR-акции, размещение рекламы — adv citforum. Команда процессора может быть от 1 до 15 байтов длиной включая возможные префиксы. Любители комбинаторики могут подсчитать количество возможных инструкций при такой схеме. Но и без подсчетов ясно, что число астрономическое. Команда может иметь один или несколько так называемых префиксов; собственно код операции он называется опкодом состоит из 1 или 2 байтов, а дальше идут байты, описывающие операнды - данные или ссылки на данные , над которыми производится соответствующая операция. Даже если считать командой лишь байты опкода, то возможны однобайтных команд и столько же двухбайтных в двухбайтных опкодах первый байт всегда одинаков и равен 0Fh. В этом примере мы видим одну важную особенность обращения к данным в памяти: В данном случае операнд находится в памяти и может занимать 1, 2 или 4 байта, тогда как адрес входящий в состав самой инструкции в любом случае занимает 4 байта. Составим инструкцию для перемещения в регистр EAX значения, которое хранится по адресу 1. Между тем результат операции будет разительно отличаться: Архитектура IA предоставляет очень богатый набор способов адресации памяти. Понятное дело, в машинных кодах никаких букв нет, и регистры кодируются тремя битами в указанном выше порядке - от до Но в разговоре для удобства мы будем использовать и их "названия". Еще одна особенность интеловских процессоров - они несут на себе "печать своего детства": Еще раньше микропроцессоры были 8-разрядными, и регистров у них было поменьше; очевидно, это тоже оставило свой след, поскольку к четырем разрядным регистрам AX, CX, DX, BX можно обращаться побайтно, то есть отдельно к старшему и младшему байтам. Он предоставляет такие богатые возможности для творчества, что будет неудивительно, если через некоторое время станут проводить чемпионаты по спортивному программированию в машинных кодах, а лучшие творения кодеров представлять на выставках, как произведения искусства. Множество интересных находок было накоплено за прошедшие годы кодокопателями, среди которых есть как законные системные программисты, так и подпольные авторы вирусов, хакеры и кракеры. Как же узнать, к какой именно части регистра происходит обращение, тем более, если коды регистров одни и те же как в случае EAX, AX и AL? Эта информация заложена в саму инструкцию. Многие опкоды имеют так называемый бит w, который указывает на размер используемого регистра или операнда в целом: В разрядном режиме бит w обозначает размер операнда 8 или 16 бит. Но современная Windows работает в разрядном режиме, и состояние бита w обозначает размер операнда 8 или 32 бита. Обращение к 16 младшим битам регистра тоже возможно, но для этого используется другая схема с применением префиксов об этом поговорим в другой раз. При обращении к памяти в инструкции указывается адрес, по которому расположены данные. Рассмотрим различные способы доступа к данным на примере инструкции а вернее, группы инструкций перемещения данных, которыми мы будем очень активно пользоваться. На ассемблере группа данных инструкций обозначается мнемоникой MOV. А если, не приведи господи, в набранном из самоучителя тексте окажется опечатка и система выдаст кучу сообщений об ошибках - для новичка продраться через это, по моему глубокому убеждению, гораздо более нереально, чем построить собственными руками подобное же, но работоспособное приложение в машинных кодах. Во-первых, это несколько отвлекает от нашей непосредственной темы; во-вторых, кому надо, без труда найдет соответствующие сведения; а в-третьих, все это и так запомнится при практической работе. А если на первых порах будут проблемы, в Windows есть стандартное приложение - калькулятор, который можно использовать для перевода чисел из одной формы в другую. В свое время был такой программируемый калькулятор - Б Он имел 14 регистров для хранения чисел. В процессоре тоже есть набор разрядных регистров общего пользования, и их всего 8. А сама программа представляет собой набор инструкций. Все уже знают, что информация в компьютере представлена в виде двоичных чисел. Обычно в этом месте положено рассказывать об основах двоичного и шестнадцатеричного счислений и способах перевода чисел из одной формы представления в другую, но мы этого делать не будем. Компьютер - это машина для обработки информации. Для этой цели вся информация, которую нужно обработать, делится на более-менее элементарные "кусочки". Необходимая обработка тоже подразделяется на более-менее элементарные действия. Элементарный "кусочек" обрабатываемой информации называется операндом, а элементарное действие - командой. Таким образом, инструкция процессора представляет собой команду и связанные с ней операнды которые, кстати, могут подразумеваться, а не быть явно заданными в инструкции.
Отзывы на Как читать машинный код
lighbichalkfin пишет:
The VK.com and vkontakte.ru websites аленкой.
temokuhidasu пишет:
Бесплатно без регистрации светлой стороны, здесь появилась возможность прохождения mirror Edge температура поднялась до 74 градусов. Ксении.
|