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

Document
 
 
 
 
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 >

   
   
   

http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru http://global-control.ru
   
© читать онлайн,читать онлайн бесплатно

снять жилье в сочи
аренда жилья в сочи
снять апартаменты в сочи
снять квартиру в адлере
снять жилье в адлере
адлер снять жилье у моря недорого
снять квартиру в адлере на длительный срок
снять жилье в сочи недорого
квартира в адлере снять
снять квартиру в дагомысе
снять квартиру в дагомысе на длительный срок
адлер снять жилье у моря
снять квартиру в сочи
купить квартиру в сочи
снять квартиру в москве
москва снять квартиру на длительный срок
снять квартиру в москве на длительный
снять квартиру в москве посуточно
снять квартиру в москве недорого

снять жилье в сочи

снять квартиру в сочи

купить квартиру в сочи

аренда жилья в сочи
снять апартаменты в сочи
снять квартиру в адлере
снять жилье в адлере
адлер снять жилье у моря недорого
снять квартиру в адлере на длительный срок
снять жилье в сочи недорого
квартира в адлере снять
снять квартиру в дагомысе
снять квартиру в дагомысе на длительный срок
адлер снять жилье у моря

услуги юристов в Уфе

Адвокат по жилищным вопросам в Уфе

Оформление права собственности в Уфе

Долевое строительство в Уфе

Выселение и вселение в Уфе

Возмещение ущерба в Уфе

Снижение кадастровой стоимости в Уфе

Споры по границам земельного участка в Уфе

Оформление наследства в Уфе

Оспаривание завещания в Уфе

Адвокат по наследственным делам в Уфе

Семейный юрист в Уфе

Юрист по разводу в Уфе

Споры о детях в Уфе

Установление, оспаривание отцовства в Уфе

Помощь в спорах по разделу имущества в Уфе

Признание недееспособным в Уфе

Иск о разделе имущества в Уфе

Споры с банками и страховыми компаниями в Уфе

Возврат страховки в Уфе

Страховые выплаты по ОСАГО и КАСКО в Уфе

Защита прав заемщика в Уфе

Помощь при взыскании имущества в Уфе

Взыскание долгов в Уфе

Банкротство физлиц в Уфе

Консультация юриста в Уфе

Юридические услуги для бизнеса в Уфе

Юридический аутсорсинг в Уфе

Представительство в судах в Уфе

Регистрация юридических лиц в Уфе

Регистрация ООО в Уфе

Внесение изменений в ООО в Уфе

Регистрация НКО в Уфе

Внесение изменений в НКО в Уфе

Регистрация ИП в Уфе

Ликвидация и реорганизация в Уфе

Арбитраж в Уфе

Юрист по договорам в Уфе

Споры по недвижимости в Уфе

Корпоративный юрист в Уфе

Выкуп муниципального имущества в Уфе

Лизинговые споры в Уфе

Обжалование торгов и аукционов в Уфе

Административные споры в Уфе

Банкротство в Уфе

Лучший юрист в Уфе

Лучший адвокат в Уфе

Лучший юрист в Уфе

Лучший адвокат в Уфе