Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.01.2011, 17:45   #1
Васнецов Валерий
 
Аватар для Васнецов Валерий
 
Регистрация: 05.01.2011
Сообщений: 8
По умолчанию 16 разрядный Дизассемблер

Всем привет! изучаю и изучал ассемблер( не ограничиваясь изучением только единственного языка). достаточно сложный язык програмирования, Постигаю ассемблер посредством компилятора Tasm на 16 разрядной архитекутре Intel 8086.

Итак. мне нужна помощь в напсиании дизасемлера
1.Для этого я раскодирвовал команды в разных алресациях
2. Разобрался с таблицей ASCII она необходима для сегмента данных ds

Несмотря на все эти микроуспехи, у меня возникли следщие вопросы.
1.Как все это реализовать
1.1 Когда просматриваю com exe файл в far manadger то выдает , всякие палочки точечки , запятушки и прочее
1.2 Мне хотелось бы чтоб исходный файл был разбит на последовательность 16 разрядных разрядов ,блоков из 16 разрядных циферок.Думаю что сама идея будет в интепритации 16 разрядных циферок мнемоническими командами.
1.3 Возможно моя идея совсем неправильна для моей задачи( написания дизассемлера).
1.4 Жду ващих откликов, Дорогие Товарищи, надеюсь мне откроют глаза. "просветят мне эту дорогу".
Миру Мир!

Последний раз редактировалось Васнецов Валерий; 05.01.2011 в 17:53. Причина: нашол нелогичность в высказывании
Васнецов Валерий вне форума Ответить с цитированием
Старый 05.01.2011, 18:16   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

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


p.s. внутри EXE и COM файла не "всякие палочки точечки , запятушки и прочее..." а байты (которые могут складываться как в двоичные слова (WORD), так и в структуры данных)
А чтобы дизассемблировать EXE файл - нужно ещё формат про MZ EXE файла почитать...
Короче, достаточно это всё трудоёмко и сложно.
Вы уверены, что оно Вам надо?!
и главное, ЗАЧЕМ ?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 05.01.2011, 18:21   #3
Васнецов Валерий
 
Аватар для Васнецов Валерий
 
Регистрация: 05.01.2011
Сообщений: 8
По умолчанию

Дело в том, что задание является курсовым проектом.Естественно, я бы мог воспользоваться удобным и готовым решением например Ida Pro .
Миру Мир!
Васнецов Валерий вне форума Ответить с цитированием
Старый 05.01.2011, 18:41   #4
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

Цитата:
Сообщение от Васнецов Валерий Посмотреть сообщение
сама идея будет в интепритации 16 разрядных циферок
Сама идея будет в дешифрации потока байт согласно вот такой табличке. Далеко не все команды занимают 16 бит, кстати.
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."

Последний раз редактировалось veniside; 05.01.2011 в 18:46.
veniside вне форума Ответить с цитированием
Старый 05.01.2011, 18:42   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Дело в том, что задание является курсовым проектом.
у... сочувствую..

А какой ЯП Вы выбрали для написания своего дизассемблера?

Литературу (теорию) штудировали?
Готовые дизассемблеры искали?

В принципе (подчёркиваю - в принципе) задача не очень сложная. Но! есть один нюансик. и данные и код лежат вместе, отделить одно от другого - не всегда тривиальная задача (кстати, именно этим гордится г-н Ильфак в своём IDA Pro)
к этому тянуться не стоит..
Вам за основу надо брать результат, который дают простые линейные дизассемблеры, ну что-то вроде Sourcer'а, ну или то, что показывает Hiew....

p.s. может Вам стоит во фриланс обратиться?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 06.01.2011, 14:07   #6
Васнецов Валерий
 
Аватар для Васнецов Валерий
 
Регистрация: 05.01.2011
Сообщений: 8
По умолчанию

спасибо за просветление в моем сознании
1.Собираюсь писать на tasm
2.Книгу читал "Искуство дизасемблирования" Пирогов, "Ассемблер и Дизассемблер "Пирогов.
3.Но там токо идея самого разбора команд, там опкод. байт mod rm
Вобщем то уже разобрался как интерпритироваь команды ,например
mov ax,bx 8BC3 в машинном коде.А как написать свой простенький Дизассемлер , к сожалению , нет...

По ссылочке мну перешол. но до сих пор не могу понять . как , каким образом ее использовать , ориентироваться в ней.
Сам уже несколько раз успел разочароваться , но чтоже джумаю все будет хорошо!
Миру Мир!

Последний раз редактировалось Васнецов Валерий; 06.01.2011 в 14:20.
Васнецов Валерий вне форума Ответить с цитированием
Старый 06.01.2011, 14:52   #7
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

В таблице слева идёт колонка значений старших 4 бит разбираемого байта, а сверху строка младших 4 бит. Т.е, например, если встретился нам байт 0x56, то идём в колонку x6 и в ней ищем пересечение со строкой 5х, что даёт нам команду PUSH SI длиной 1 байт, всё, переходим к следующему опкоду.
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 06.01.2011, 15:17   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
1.Собираюсь писать на tasm
это Ваше решение или требование к заданию?

Просто, если возможно - используйте язык высокого уровня. То, что в ЯП высокого уровня делается одной строчкой, на ассемблере может потребовать десятки и сотни строчек кода..

а ссылочка veniside отличная!
Цитата:
но до сих пор не могу понять . как , каким образом ее использовать
берём команду. находим по таблице опкодов, что она значит и какая у неё длина.
А вот какие регистры, какая адресация использовалась - находится в следующем байте...

Почитайте - Kaspersky Kris ДИЗАССЕМБЛИРОВАНИЕ В УМЕ
ещё, был такой справочник под MS DOS - TECH HELP! можете его найти и поюзать (он полностью на английском, на там технический английский - всё очень просто)

вот здесь неплохой талмудик (тоже на английском) - Encoding of 8086 Instructions
(кстати, первая же фраза - "Команды 8086 представляются двоичными числами от 1 до 6 байт длиной" )


p.s. ещё раз приношу Вам свои соболезнования... Тут пахать, пахать и пахать...


Добавлено

Цитата:
Сообщение от veniside
В таблице слева идёт колонка значений старших 4 бит разбираемого байта, а сверху строка младших 4 бит. Т.е, например, если встретился нам байт 0x56
ну, если бы всё так было просто и очевидно... там же есть команды, занимающие больше одного байта...
Попробуйте объяснить TC как по таблице дизассемблировать такие команды:
8B CB
или
33 DB
или
33 3A
или
89 16 E6 00
или
80 0E E2 00 08

Последний раз редактировалось Serge_Bliznykov; 06.01.2011 в 15:32.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 06.01.2011, 15:40   #9
Васнецов Валерий
 
Аватар для Васнецов Валерий
 
Регистрация: 05.01.2011
Сообщений: 8
Хорошо

Все будет хорошо!
На все воля Господня!

Спасибо,что помогаете,уделяя внимание к моей проблеме,
а так по-существу задачи могу сказать
1. язык использовать можно любой , принципиальности выбора языка тут нет совсем.
2.Крис Касперски , уже прочтен мной именно эта статься про дизассемлирование в уме.

Понятен мне совет в выбое языка программирования . тоесть язык более высоко уровня програмирования
3. Так вот открыв такбличку я разобрался лишь в небольшом кусочку 0x56
тоесть столкик с 6 , сточка с 5 смотрим перекрестье полуется push si зачем или для чего нам в окошку с командой _ _ _1 _ _ _ 15 нечто вроде этого,( Извиняюсь возможо мои вопросы вызовут негодование и гнев,заранее Извиняюсь Хотелось бы подробно получить инструкцию для пользования данной полезной таблицей
Миру Мир!

Последний раз редактировалось Васнецов Валерий; 06.01.2011 в 15:41. Причина: ошибка фактическая
Васнецов Валерий вне форума Ответить с цитированием
Старый 06.01.2011, 15:41   #10
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
Попробуйте объяснить
...

80 0E E2 00 08
А я и не говорил, что будет легко ) Поэтому и привёл однобайтовый опкод для примера, чтобы не спугнуть человека раньше времени)
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как написать Дизассемблер --=SaNitinDG=- Общие вопросы C/C++ 5 15.02.2010 23:48
Интерактивный дизассемблер valerij Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 23.12.2009 02:41
16-разрядный .obj файл и Delphi 7 КСВ Общие вопросы Delphi 11 22.09.2009 11:22
32-разрядный реальный режим smileman Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 21.05.2009 21:40
Дизассемблер Mago Паскаль, Turbo Pascal, PascalABC.NET 4 25.07.2008 15:07