|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
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 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
не хотелось бы жестоко обрывать Ваши мечты и возвращать Вас с Небес на землю грешную, но Вы уверены, что (по крайней мере, на настоящий момент) написать дизассемблер - это хорошая мысль?!..
p.s. внутри EXE и COM файла не "всякие палочки точечки , запятушки и прочее..." а байты (которые могут складываться как в двоичные слова (WORD), так и в структуры данных) А чтобы дизассемблировать EXE файл - нужно ещё формат про MZ EXE файла почитать... Короче, достаточно это всё трудоёмко и сложно. Вы уверены, что оно Вам надо?! и главное, ЗАЧЕМ ? |
05.01.2011, 18:21 | #3 |
Регистрация: 05.01.2011
Сообщений: 8
|
Дело в том, что задание является курсовым проектом.Естественно, я бы мог воспользоваться удобным и готовым решением например Ida Pro .
Миру Мир!
|
05.01.2011, 18:41 | #4 |
Старожил
Регистрация: 03.01.2011
Сообщений: 2,508
|
Сама идея будет в дешифрации потока байт согласно вот такой табличке. Далеко не все команды занимают 16 бит, кстати.
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
Последний раз редактировалось veniside; 05.01.2011 в 18:46. |
05.01.2011, 18:42 | #5 | |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
Цитата:
А какой ЯП Вы выбрали для написания своего дизассемблера? Литературу (теорию) штудировали? Готовые дизассемблеры искали? В принципе (подчёркиваю - в принципе) задача не очень сложная. Но! есть один нюансик. и данные и код лежат вместе, отделить одно от другого - не всегда тривиальная задача (кстати, именно этим гордится г-н Ильфак в своём IDA Pro) к этому тянуться не стоит.. Вам за основу надо брать результат, который дают простые линейные дизассемблеры, ну что-то вроде Sourcer'а, ну или то, что показывает Hiew.... p.s. может Вам стоит во фриланс обратиться? |
|
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 |
Старожил
Регистрация: 03.01.2011
Сообщений: 2,508
|
В таблице слева идёт колонка значений старших 4 бит разбираемого байта, а сверху строка младших 4 бит. Т.е, например, если встретился нам байт 0x56, то идём в колонку x6 и в ней ищем пересечение со строкой 5х, что даёт нам команду PUSH SI длиной 1 байт, всё, переходим к следующему опкоду.
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
|
06.01.2011, 15:17 | #8 | |||
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
Цитата:
Просто, если возможно - используйте язык высокого уровня. То, что в ЯП высокого уровня делается одной строчкой, на ассемблере может потребовать десятки и сотни строчек кода.. а ссылочка veniside отличная! Цитата:
А вот какие регистры, какая адресация использовалась - находится в следующем байте... Почитайте - Kaspersky Kris ДИЗАССЕМБЛИРОВАНИЕ В УМЕ ещё, был такой справочник под MS DOS - TECH HELP! можете его найти и поюзать (он полностью на английском, на там технический английский - всё очень просто) вот здесь неплохой талмудик (тоже на английском) - Encoding of 8086 Instructions (кстати, первая же фраза - "Команды 8086 представляются двоичными числами от 1 до 6 байт длиной" ) p.s. ещё раз приношу Вам свои соболезнования... Тут пахать, пахать и пахать... Добавлено Цитата:
Попробуйте объяснить TC как по таблице дизассемблировать такие команды: 8B CB или 33 DB или 33 3A или 89 16 E6 00 или 80 0E E2 00 08 Последний раз редактировалось Serge_Bliznykov; 06.01.2011 в 15:32. |
|||
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 |
Старожил
Регистрация: 03.01.2011
Сообщений: 2,508
|
А я и не говорил, что будет легко ) Поэтому и привёл однобайтовый опкод для примера, чтобы не спугнуть человека раньше времени)
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Как написать Дизассемблер | --=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 |