Реклама на сайте  

косметология спб
чистка лица спб
массаж лица спб
смас лифтинг цена спб
клиника косметологии спб
смас лифтинг спб
smas лифтинг спб
чистка лица спб цены
лечебный массаж спины спб
массаж лица спб цены
косметология санкт петербург
фотоэпиляция спб
плазмолифтинг спб
чистка лица санкт петербург
плазмолифтинг цена спб
биоревитализация спб
студия массажа лица спб
контурная пластика спб
биоревитализация лица спб
клиника косметологии санкт петербург
рф лифтинг спб цены
rf лифтинг санкт петербург
рф лифтинг спб
биоревитализация спб цена
массаж лица санкт петербург
лечебный массаж спины спб цены
удаление пигментных пятен спб
криомассаж лица цена спб
удаление татуажа спб
смас лифтинг санкт петербург
криомассаж лица спб
rf-лифтинг спб
rf лифтинг спб
снять квартиру в сочи
снять квартиру в адлере
снять квартиру в хосте
снять квартиру в дагомысе
снять квартиру в сочи
снять квартиру в адлере
снять квартиру в хосте
снять квартиру в дагомысе
снять квартиру в москве
купить квартиру в москве
заказать продвижение сайта
как заработать деньги в интернете
пилинг спб

 
 
Document
 
 
 
 

Обратите внимание на порядок регистров: AX, CX, DX, BX, SР, BР, SI, DI. Немного не по алфавиту, верно? И особенно странно в этом отношении выглядит регистр BX. Но, если понять причины, то никакой нужны запоминать это исключение не будет, т.к. все станет на свои места: BX — это индексный регистр, и первым стоит среди индексных.

Таким образом, мы уже можем «вручную» без дизассемблера распознавать в шестнадцатеричном дампе регистры-операнды. Очень неплохо для начала! Или писать самомодифицирующийся код. Например:


Тонкости дизассемблирования - any2fbimgloader11.jpeg

Он изменит 6 строку на XOR SP,SP. Это «завесит» многие отладчики, и, кроме того, не позволит дизассемблерам отслеживать локальные переменные адресуемые через SР. Хотя IDA Pro и позволяет скорректировать стек вручную, для этого надо сначала понять, что SР обнулился. В приведенном примере это очевидно (но в глаза, кстати, не бросается), а если это произойдет в многопоточной системе? Тогда изменение кода очень трудно будет отследить, особенно в листинге дизассемблера. Однако, нужно помнить, что самомодифицирующийся код все же уходит в историю. Сегодня он встречается все реже и реже.


Тонкости дизассемблирования - any2fbimgloader12.jpeg

Первоначально сегментные регистры кодировались всего двумя битами и этого с вполне хватало, т.к. их было всего четыре. Позже, когда количество их увеличилось, перешли на трехбитную кодировку. При этом две кодовые комбинации (110b и 111b) в настоящее время не применяются и вряд ли будут добавлены в ближайшем будущем. Но что же будет, если попытаться их использовать? Генерация INT 06h. А вот отладчики-эмуляторы могут вести себя странно. Одни не генерируют при этом прерывания, чем себя и выдают, а другие — ведут себя непредсказуемо, т.к. при этом требуемый регистр может находится в области памяти, занятой другой переменной (это происходит, когда ячейка памяти определяется по индексу регистра, при этом считываются три бита и суммируются с базой, но никак не проверяются пределы).


Тонкости дизассемблирования - any2fbimgloader13.jpeg

Кстати, IDA Pro вообще отказывается анализировать весь последующий код. Как это можно использовать? Да очень просто — если эмулировать еще два сегментных регистра в обработчике INT 06h, то очень трудно это будет как отлаживать, так и ди-зассемблировать программу. Однако, это опять-таки не работает под win32!

Управляющие/отладочные регистры кодируются нижеследующим образом:


Тонкости дизассемблирования - any2fbimgloader14.jpeg

Заметим, что коды операций mov, манипулирующих этими регистрами, различны, поэтому-то и возникает кажущееся совпадение имен. С управляющими регистрами связана одна любопытная мелочь. Регистр CR1, как известно большинству, в настоящее время зарезервирован и не используется. Во всяком случае, так написано в русскоязычной документации. На самом деле регистр CR1 просто не существует! И любая попытка обращения к нему вызывает генерацию исключение INT 06h. Например, cuр386 в режиме эмуляции процессора этого не учитывает и неверно исполняет программу. А все дизассемблеры, за исключением IDA Pro, неправильно дизассемблируют этот несуществующий регистр:


Тонкости дизассемблирования - any2fbimgloader15.jpeg

Все эти команды на самом деле не существуют и приводят к вызову прерывания INT06h. Не так очевидно, правда? И еще менее очевидно обращение к регистрам DR4-DR5. При обращении к ним исключения не генерируется. Между прочим, IDA Pro 3.84 дизассемблирует не все регистры. Зато великолепно их ассемблирует (кстати, ассемблер этот был добавлен другим разработчиком).

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

Теперь перейдем к описанию режимов адресации микропроцессоров Intel. Тема очень интересная и познавательная не только для оптимизации кода, но и для борьбы с отладчиками.

Первым ключевым элементом является байт modR/M.


Тонкости дизассемблирования - any2fbimgloader16.jpeg

Как отмечалось выше, по байту modR/M нельзя точно установить регистры. В зависимости от кода операции и префиксов размера операндов, результат может коренным образом меняться.

Биты 3-5 могут вместо определения регистра уточнять код операции (в случаи, если один из операндов представлен непосредственным значением). Младшие три бита всегда либо регистр, либо способ адресации, что зависит от значения 'mod'. А вот биты 3-5 никак не зависят от выбранного режима адресации и задают всегда либо регистр, либо непосредственный операнд.

Формат поля R/M, строго говоря, не документирован, однако достаточно очевиден, что позволяет избежать утомительного запоминания совершенно нелогичной на первый взгляд таблицы адресаций (таблица 3).


Тонкости дизассемблирования - any2fbimgloader17.jpeg

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

Действительно, в поле R/M все три бита тесно взаимосвязаны, в отличии от поля mod, которое задает длину следующего элемента в байтах.


Тонкости дизассемблирования - any2fbimgloader18.jpeg

Разумеется, не может быть смещения 'offset 12', (т.к. процессор не оперирует с полуторными словами), а комбинация '11' указывает на регистровую адресацию.

Может возникнуть вопрос, как складывать с 16-битным регистром 8 битное смещение? Конечно, непосредственному сложению мешает несовместимость типов, поэтому процессор сначала расширяет 8 бит до слова с учетом знака. Поэтому, диапазон возможных значений составляет от —127 до 127. (или от —0x7F до 0x7FF).

Все вышесказанное проиллюстрировано в приведенной ниже таблице 3. Обратим внимание на любопытный момент — адресация типа [BР] отсутствует. Ее ближайшим эквивалентом является [BР + 0]. Отсюда следует, что для экономии следует избегать непосредственного использования BР в качестве индексного регистра. BР может быть только базой. И mov ax,[bp] хотя и воспринимается любым ассемблером, но ассемблируется в mov ax,[bр+0], что на байт длиннее.

Исследовав приведенную ниже таблицу 1, можно прийти к выводу, что адресация в процессоре 8086 была достаточно неудобной. Сильнее всего сказывалось то ограничение, что в качестве индекса могли выступать только три регистра (BX, SI, DI), когда гораздо чаще требовалось использовать для этого CX (например, в цикле) или AX (как возвращаемое функцией значение).

Поэтому, начиная с процессора 80386 (для 32-разрядного режима), концепция адресаций была пересмотрена. Поле R/M стало всегда выражать регистр независимо от способа его использования, чем стало управлять поле 'mod', задающие, кроме регистровой, три вида адресации:


Тонкости дизассемблирования - any2fbimgloader19.jpeg


<< < 1 2 3 4 5 >

   
Document
   
© читать онлайн,читать онлайн бесплатно
Document

косметология спб
чистка лица спб
массаж лица спб
смас лифтинг цена спб
клиника косметологии спб
смас лифтинг спб
smas лифтинг спб
чистка лица спб цены
лечебный массаж спины спб
массаж лица спб цены
косметология санкт петербург
фотоэпиляция спб
плазмолифтинг спб
чистка лица санкт петербург
плазмолифтинг цена спб
биоревитализация спб
студия массажа лица спб
контурная пластика спб
биоревитализация лица спб
клиника косметологии санкт петербург
рф лифтинг спб цены
rf лифтинг санкт петербург
рф лифтинг спб
биоревитализация спб цена
массаж лица санкт петербург
лечебный массаж спины спб цены
удаление пигментных пятен спб
криомассаж лица цена спб
удаление татуажа спб
смас лифтинг санкт петербург
криомассаж лица спб
rf-лифтинг спб
rf лифтинг спб
пилинг спб антицеллюлитный массаж томск
массаж томск
лимфодренажный массаж томск
антицеллюлитный массаж томск
классический массаж томск
коррекция фигуры томск
ремонт телевизоров москва
ремонт пылесосов москва
ремонт кофемашин москва
ремонт самсунг москва
ремонт микроволновки москва
ремонт samsung москва
ремонт парогенераторов москва
ремонт насосных станций москва
ремонт борк москва
ремонт delonghi москва
Ремонт dyson москва
ремонт пылесосов dyson москва
ремонт дайсон москва
ремонт бытовой техники
ремонт бытовой техники москва
ремонт телевизоров москва
ремонт пылесосов москва
ремонт кофемашин москва
ремонт самсунг москва
ремонт микроволновки москва
ремонт samsung москва
ремонт парогенераторов москва
ремонт насосных станций москва
ремонт борк москва
ремонт delonghi москва
Ремонт dyson москва
ремонт пылесосов dyson москва
ремонт дайсон москва
ремонт бытовой техники
ремонт бытовой техники москва
ремонт телевизоров москва
ремонт пылесосов москва
ремонт кофемашин москва
ремонт самсунг москва
ремонт микроволновки москва
ремонт samsung москва
ремонт парогенераторов москва
ремонт насосных станций москва
ремонт борк москва
ремонт delonghi москва
Ремонт dyson москва
ремонт пылесосов dyson москва
ремонт дайсон москва
ремонт бытовой техники
ремонт бытовой техники москва
ремонт телевизоров москва
ремонт пылесосов москва
ремонт кофемашин москва
ремонт самсунг москва
ремонт микроволновки москва
ремонт samsung москва
ремонт парогенераторов москва
ремонт насосных станций москва
ремонт борк москва
ремонт delonghi москва
Ремонт dyson москва
ремонт пылесосов dyson москва
ремонт дайсон москва
ремонт бытовой техники
ремонт бытовой техники москва
маникюр
педикюр
маникюр краснодар
педикюр краснодар
нейл сервис
ногтевой сервис
салон красоты
салон красоты краснодар
коррекция бровей краснодар
маникюр
педикюр
маникюр краснодар
педикюр краснодар
нейл сервис
ногтевой сервис
салон красоты
салон красоты краснодар
коррекция бровей краснодар
маникюр
педикюр
маникюр краснодар
педикюр краснодар
нейл сервис
ногтевой сервис
салон красоты
салон красоты краснодар
коррекция бровей краснодар
LPG москва
LPG массаж москва
аппаратный массаж москва
коррекция фигуры москва
лазерная эпиляция москва
коррекция фигуры москва митинская
лазерная эпиляция москва митинская
прессотерапия москва митино
прессотерапия москва
прессотерапия москва митинская
натуральная косметика
эко товары
эко продукты
магазин эко товаров
одежда из льна
парфюмерия
косметика
парфюмерия и косметика
селективная парфюмерия
селективные духи
эксклюзивная косметика
натуральная косметика самара
эко товары самара
эко продукты самара
магазин эко товаров самара
одежда из льна самара
парфюмерия самара
косметика самара
парфюмерия и косметика самара
селективная парфюмерия самара
селективные духи самара
эксклюзивная косметика самара
капучино краснодар
латте краснодар
эспрессо краснодар
эспрессо
кофе с собой
кофе с собой краснодар
кальянная краснодар
лаунж бар краснодар
кальянная краснодар круглосуточно
кальянная лаунж
заказ пиццы выборг
суши выборг на заказ
суши wok
заказать пиццу в выборге
заказать пиццу в выборге с доставкой
суши выборг телефон
суши бар в выборге
пицца выборг телефон
рис и рыба суши выборг
рис и суши выборг
заказать суши в выборге
суши роллы выборг
суши выборг