Дизасемблирование
Доброго времени суток. Интересует дизасемблирование. Подскажите пожалуйста какую нибудь понятную литературку( лучше чтобы это была небольшая статья на каком нить сайте) по дизасемблированию. В википедии вычитал что оно бывает автоматическое. Это значит что есть программы которые сами производят процесс дизасемблирования? Интересует дизасемблирование не огромных программ а простеньких состоящих в основном из арифметических команд, и команд пересылки( лабораторные работы). Код программ не более 12 строк. Программирование происходит в среде Турбо Делфи (asm.... end;) Спасибо:)
|
Ты хочешь исполняемый файл дизассемблировать и получить на выходе код на языке высокого уровня (Turbo Delphi)?
|
у меня есть открытый код, его необходимо перевести в двоичную Сс
|
Цитата:
Ассемблер и дизассемблирование [Пирогов] Посмотрите эту книгу, для начала. |
BlackEric, если бы я сам понимал. Преподаватель выдал лабораторную работу, надо сделать. процитирую небольшой отрывок из описания к данной работе
Цитата:
|
Если я правильно понял задание, то вам нужно не дизассемблировать программу, а наоборот _вручную_ перегнать имеющийся текст программы (на ассемблере?) в машинные коды.
Когда то на лабе под какой-то контроллер такое делали. Там были какие-то таблицы и по ним транслировали ассемблерные команды в машинный код. Т.е. берите таблицы и по описанию из методы. А автоматически это делает компилятор :) |
BlackEric, вы правильно поняли. есть команды ассемблера а из них необходимо получить , как я понял, либо двоинчные коды или шестнадцатиричные. Есть ли какая нибудь программа которая это делает? Где можно взять эти таблицы, потому что в своей методе я не наблюдаю
|
Таблицы кодов операций? Спросите у препода. Или если под Intel то возможно у них :)
Эта программа - компилятор. Он перегонит в бинарный вид исходник вашей процедуры. Но вам это не поможет. Мы делали вручную там не так сложно как кажется. |
BlackEric, хорошо, по гуглю эти таблицы. у препода их нет.Мне вообще кажется что она не совсем адекватна.
|
По идее, но я не пробовал.
Если у вас как я понял есть ассемблерный кусок кода в делфе в процедуре вида asm .... end; то если его скомпилить выключив всевозможную оптимизацию и потом открыть в WinHex получившийся exeшник то в каком-то месте будет то что нужно в машинных кодах. Но это только идея! |
BlackEric, а можно поподробнее как это сделать в Турбо Делфи или Делфи 7?
|
Пробую сходу.
1. От вас хотят работу с 16 битными регистрами. Делфи же 32х. Возможно он не позволит. Но попробуем. У меня bds 2006. Создаю консольное приложение Код:
program asmtest; Открываем exeшник WinHexом. И ищем в нем HexValue 1D1D. Находим одно единственное вхождение: По offset 11952 есть строка: B8 1D 1D 00 00 05 10 1D 00 00 E8.... Я так понимаю, но не уверен, что это и есть то, что нас интересует. Пробуйте! И отпишитесь о результате. Очень интересно, что получится. |
По-моему, вы что-то не то делаете.
Вам скорее всего нужно именно дизассемблировать команды вашей программы(скомпилированной), чтобы далее можно было разложить коды команд на составляющие. Для этого берёте какой-нибудь CADt by Ms-Rem, далее изучаете формат машинных команд по книге Юрова и начинаете дизассемблировать свою программку.Тогда вы будете выделять из кода т.н. КОП, флаг направления передачи данных, размер этих данных, байт mod r/m, смещение, непосредственный операнд и т.д. За список дизасм-движков благодарю HandMill'а: // продвинутые distorm поддержка x64 beaengine поддержка x64 udis86 поддержка x64 движок от mika0x65 поддержка x64 hde дизассемблер длин, поддержка x64. X86IME ассемблирование инструкций, поддержка x64 X86IME patch to compile in UNIX by nibble pvdasm // устаревшие catchy32 cadt (masm 1.1 version by cyberdoomsystems) [cadt c version] cadt.h cadt.c disit |
Вложений: 1
Или же еще проще. Через PE Explorer. Дизассемблируем получившийся exeшник и в окошке видим
B81D1D0000 mov eax,00001D1Dh, где левая часть выражения, то что нам нужно http://forum.oszone.net/attachment.p...1&d=1270068897 |
BlackEric, вы видимо не до конца понимаете, что есть дизассемблирование.
|
DillerInc, вы правы. мне нужно получить именно то что вы сказали
|
Цитата:
Код:
C:\>debug Цитата:
Или же Snake750, сам не знает, что ему нужно. В приведенной выдержке из Цитата:
хе-хе: Код:
C:\>debug |
DillerInc, можно подробнее? Что не так?
|
BlackEric, дизассемблирование - это в первую очередь разложение бинарного вида команды на составляющие(писал об этом выше).
Например, какой нам толк от последовательности следующих байт: 8Bh 35h 1Ch 68h 0A8h 00 ? А скормив указатель на эту последовательность тому же CADt, мы сможем проанализировать поля возвращённой структуры и понять суть команды ровно как и составить её мнемонику: mov esi, dword ptr [00A8681C] Просто я думаю, что препод не настолько глуп, чтобы давать такую грошевую задачу как банальный вывод бинарного вида команды. Цитата:
|
Цитата:
В 16- Цитата:
Надо бы, для начала, все задание увидеть. Правда, есть вероятность, что преподаватель эту ветку тоже прочтет :) |
DillerInc, я все это понимаю. Просто я сходу предложил автору пришедший мне в голову вариант автоматизированного решения:
1. скомпилировать имеющююся программу на ассемблере, что бы получить требуемый двоичный код 2. найти нужное место в полученном exe файле и забрать оттуда бинарные команды. Насколько я понимаю, мое решение шаблон моего решения полностью соответствует задаче автра темы. |
Цитата:
Например, команда - mov esi, dword ptr [00A8681C] - скопирует DWORD по адресу 00A8681Ch в регистр ESI.Это нам и необходимо узнать.Какое значение она скопирует и какое значение будет находится в ESI в текущий момент времени - это уже совсем другая история. Цитата:
|
DillerInc, пардон, 16-разрядной (16-битной). Вот та-же самая последовательность:
Код:
8B35 MOV SI,[DI] |
Цитата:
Есть ассемблерные команды из них необходимо получить машинный код. Лабу сегодня сдал, нашел норм методичку у другого препода с человеческим описанием. Вам спасибо за помошь |
Цитата:
Цитата:
|
CyberDaemon, да я догадовался что она сама мало понимает о чем говорит. нашел сегодня методичку, в которой есть таблицы и примеры нормальные. на все ушло минут 25-30.
|
Время: 05:14. |
Время: 05:14.
© OSzone.net 2001-