Поиск:

Ответ в темуСоздание новой темы Создание опроса
> дизасемблирование команды sub, дизасемблирование команды sub 
:(
    Опции темы
strife
Дата 12.5.2011, 18:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 12.5.2011

Репутация: нет
Всего: нет



Здравстуйте. Прошу помощи, вот задачка.

Написать программу дисассемблирования в оперативной памяти команды вычитания sub. Информацию записать в файл. Программа дисассемблирования состоит в следующем: указать адрес оперативной памяти для попытки представить в виде символьной команды подходящее число байт. Если имеются альтернативы, то выдавать их. По крайней мере должно быть две программы: основная, которая вводит и выводит и обращается к подпрограмме дисассемблирования, а также подпрограмма дисассемблирования.
 
Заранее благодарен!

Это сообщение отредактировал(а) strife - 12.5.2011, 19:25
PM MAIL   Вверх
izl3sa
Дата 13.5.2011, 09:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 25.6.2010

Репутация: нет
Всего: нет



Вкратце

в общем виде инструкция процессора имеет следующий вид ([] помечены части, которые не всегда присутствуют)

[префиксы] код операции [байт modrm] [байт sib] [offset32][imm32]

modrm и sib участвуют в механизме адресации операндов команды. 
modrm состоит из трех частей
Режим (mod) - определяет значение поля rm
Поле reg - В большинстве случаев здесь записан регистр, но бывает, что сюда кладется расширение опкода
Поле rm  - адресует регистр или ячейку памяти. Если нужна косвенная индексно-базовая адресация (и не только =) ) здесь указывается присутствие байта sib

sib = scale index base
Применяется для адресации типа [eax + 4*ebx], также, чтобы адресовать память через esp. Формат сам посмотришь.

Итого тебе нужно будет реализовать парсер modrm и sib + обработку префиксов. В зависимости от них могут различаться размерность imm и оффсетов, их тоже смотришь и выводишь 
текстовое представление.

Команда sub имеет несколько кодов операции
0x28-0x2b - стандартные команды память-регистр, в поле reg - регистр
0x2c, 0x2d - оптимизированные коды под eax/al, modrm нет
0x80-0x82, modrm.Reg = 5 - память-непосредственное значение

ссылки
http://ref.x86asm.net/coder32.html
http://wasm.ru/series.php?sid=16
ну и маны интела в помощь
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm для начинающих"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm для начинающих | Следующая тема »


 




[ Время генерации скрипта: 0.0366 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.