|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Авг 25, 2004 22:04:49 А что плохого в таблицах? (ведь речь идёт о таблицах инструкций или нет?) Такой вариант реализуется легко и красиво. И работает достаточно быстро: на моих 1533 MHz опредление длины инструкции - ~40 мс на Мб кода, декодирование - ~70 мс/Мб. Кому интересно, в аттаче выдержки из моего кода (самой таблицы инструкций там нет; поддержка только до PII, но это не суть важно). 1654135354__dasm.txt |
|
|
Дата: Авг 25, 2004 22:11:01 Такой вариант реализуется легко и красиво А вот работает не очень :) |
|
|
Дата: Авг 25, 2004 22:13:20 volodya Почему не очень? |
|
|
Дата: Авг 26, 2004 02:49:29 >>„Без таблицы if`ов ваше немеренно станет“ ни... не понимать по рюсски. Че ваше? "неменренно" - это "не измеренно" или "много"? Много. Тоесть придется декодировать каждый опкод, или схожую группу опкодов, примерно так как это сделанно здесь http://z0mbie.host.sk/disasm.txt Только вот для дизассемблера, такой информации бутет явно недостаточно >>„А все остальные наугад длину определяют“ Мне не нравится что они дизасмят все подряд без перебора особенно запакованые данные), а мне надо по ходу исполнения - если что всегда додизасмть можно. Хм... нутак в чем проблема, распакуй данные, а потом их дизассемблируй >>WinDasm отличная прога конечно, но она делает не АСМ файл а гониво своего стандарта.Вот я хочу сфарганить что-то типо,но с АСМ файлами. Я думаю,если напишешь конвертор из WinDasm формата в нужный тебе формат, потратишь намного меньше нервных клеток и времени |
|
|
Дата: Авг 26, 2004 03:49:30 Письма к Крису есть и просто текстом в разделе BOOKS. В разделе "Образовательные программы" есть обучалки и статьи. Не все вопросы там освящены но хоть что-то. На форуме есть декодер modrm с исходниками и тестовой программой. Там даже преобразование имён регистров из кодов регистров делается без прямого табличного метода. Дело не в том, чтобы полностью отказаться от табличного метода, а чтобы дешифратор декодировал хотя бы "общие поля". Вобщем так много уже сказано, что добавить в обычном режиме "болтовни" нечего, нужно дополнительные статьи писать, которые в конечно счёте должны вылится в некие обобщения - полные алгоритмы декодирования. Сейчас некогда, рецензирую книжку по прикладной логике. Здесь кстати есть ребята которые понимают в декодировании "общих полей" не хуже меня. Уступаю им слово :) |
|
|
Дата: Авг 26, 2004 09:27:55 Спасибо всем за участие ! :) Но если завелся такой спор, то может попробуем реализовать хотябы часть базовых функций для дизассемблирования. Обсуждая их на форуме можно избавиться от неочевидных ошибок и сэкономить время. |
|
|
Дата: Авг 26, 2004 11:07:33 Smile К сожалению http://z0mbie.host.sk/disasm.txt Forbidden (You don't have permission to access /disasm.txt on this server.) Не монимаю почему это должны быть именно IF, имхо они тормозные - почему не прямой jmp\mov или хтя бы сall ? Выскажитесь остальные - много IF это тормоз или нет ? Есть смысл, если возможно, не испльзовать IF. Хм... нутак в чем проблема, распакуй данные, а потом их дизассемблируй В том что дизассемблер сделает мне это кодом, а не данными. Идиотский IDA е.р. даже ресурсы за код считает и соотв. их дизасмит |
|
|
Дата: Авг 26, 2004 11:20:52 >Идиотский IDA прежде, чем чего-либо хаять, подумай, а сможешь ли написать хотя бы приблизительно ткой же "идиотский" дизассемблер? |
|
|
Дата: Авг 26, 2004 11:26:07 Если захочу да, и это займет неск. лет времени, но зачем ? он уже и так есть. Мне все-таки больше нравится WinDasm |
|
|
Дата: Авг 26, 2004 13:39:09 · Поправил: Max zzzyab К сожалению http://z0mbie.host.sk/disasm.txt Forbidden http://z0mbie.host.sk/disasme.txt - это тоже самое, только на английском Не монимаю почему это должны быть именно IF, имхо они тормозные - почему не прямой jmp\mov или хтя бы сall а куда и как ты будешь делать jmp или call? очевидно что-то типа jmp [eax]? так это и называется табличкой. Выскажитесь остальные - много IF это тормоз или нет ? ес-но! при табличной эмуляции ты делаешь переход на декодер по некоторому критерию (упрощенно скажем по первому байту опкода) за одну команду - jmp [eax] в противном случае, выход на декодер будет выполняться за тучу if-ов, что будет существенно медленнее, типа
shl al,1
jc 1xxxxxxx
0xxxxxxx:
...
1xxxxxxx:
...
если тебе нужен именно дизассемблер, бери olly, как тебе советовал Володя - он самый безглючный, хотя с ним не так просто разобраться (коментариев нет, малопонятные аббревиатуры и т.п.) если нужен только дизассемблер длин, бери движок от z0mbie, рекомендую xde - он корректно декодирует опкоды с инвалидным полем codr (он же ttt, он же reg, кто как называет ;)) а начнешь писАть свой движок - в конечном итоге напишешь тот же xde :) added похоже, по внешним ссылкам на статьи z0mbie не зайти - надо зайти в корень (http://z0mbie.host.sk), а там уже искать статью "Disassemblers within viruses" |
|
|
Дата: Авг 26, 2004 14:29:34 · Поправил: zzzyab Да, я за jmp, вот уже и начало декодера: пример дизасма add al,immed
decoder:
sub eax,eax
mov al,byte ptr [esi]; начало кода к-рый дизасм.
mov edx,opcode[eax*4]
jmp edx
add_accb:
mov dword ptr [edi],' dda'
add edi,4
jmp _accb
_accb:
mov dword ptr [edi],' la,'
add edi,3
inc esi
push [esi]
inc esi
call hex4outb ; байт в ascii и добав. 'h'
jmp decoder
.data
opcode dd add_rmb,add_rm,add_rb,add_r,add_accb,add_acc,push_es,pop_es........
ИМХО декодер инструкций, не самая сложная задача, - намного сложнее определение данных и работа с условными переходами, - создание рабочих asm файлов. Если Olly создает asm файлы к-рые компилятся и потом прога с них работает (для теста достаточно notepad и сalc потом wordpad....), то я стану его использовать. А создавать свой дизасм тоже интересно. Я не в прикол это делаю - все для практ. использования - хочу еще занятся дизасмом драйверов. Посмотрел исходник этого Olly http://home.t-online.de/home/Ollydbg/disasm.zip - не понимаю чем он хорош. Те же if\case и asm файлы он не делает. Так что я орентируюсь на WinDasm. |
|
|
Дата: Авг 26, 2004 17:19:49 zzzyab вот уже и начало декодера как говорится, самое сложное - это начать :) mov al,byte ptr [esi] mov edx,opcode[eax*4] jmp edx к сожалению, не все опкоды можно однозначно идентифицировать по первому байту, и уж тем более их операнды - есть еще modrm-байт, sib-байт, поле codr, префиксы, которые влияют на размер адреса/данных etc. если ты все это будешь зашивать в таблицу (как ты уже начал), она получится мягко говоря очень большой, а наполнять данными ее будут еще твои внуки :)) советую почитать сначала лит-ру по структуре опкода, потом посмотреть как делают люди (в том же olly или xde), а уж потом начинать писАть свой дизассемблер. ИМХО декодер инструкций, не самая сложная задача глубокое заблуждение намного сложнее ... работа с условными переходами а вот анализ и учет кросс-референсов это как два пальца... А создавать свой дизасм тоже интересно полностью с тобой согласен, но на некотором этапе работ это начинает надоедать и хотца взять че нить готовое, чем обычно и заканчивается :) кстати, тока вспомнил, z0mbie в одном из своих движков делал пример полного дизасма файла с последующим ассемблированием - вроде как на FAR'е проверял, и вроде как работало, так что ищи на его сайте... |
|
|
Дата: Авг 26, 2004 21:15:03 · Поправил: Artem Max >ИМХО декодер инструкций, не самая сложная задача глубокое заблуждение >намного сложнее ... работа с условными переходами а вот анализ и учет кросс-референсов это как два пальца... И всё-таки декодирование - элементарная задача. А вот с ветвлениями можно повозиться! |
|
|
Дата: Авг 27, 2004 09:54:21 Да... я так понимаю, что зря я затеял это все :) Писать свой дизасм (как мне представляется) необходимо все-таки уже имея на руках какие-то наработки. 1. Я сейчас пользуюсь дизассемблером длин z0mbie, но хотелось бы иметь и свой :) (это не к вопросу о изобретении велосипеда, а понять как это делается и может быть придумать что-то новое) 2. Я тогда упрощу задачу. Мне, в самом деле, и не нужет дизассемблер целиком (хотя и интересно написать свой). Мне нужно было, используя его, определять команды переходов (jxx) и изменять адреса переходов. Тоесть копируя часть функции в буфер эти Jxx уже будут указывать на валидные адреса - и вот их и надо было изменять. Сложно ли это сделать ? |
|
|
Дата: Авг 28, 2004 05:07:01 · Поправил: zzzyab Asterix htm2chm из http://yarix.by.ru/ - нерабочая. Наверне из-за того что у меня нет МСИЕ. Artem У тебя пример дизасма с использованием ООП - имхо для дизасма ООП не нужно. Max Про все эти sib и моdr я знаю,и соласен таблица опкодов большая и она там не одна, а про внуков ты сильно приувеличел, - в ваших дизасмах тоже самое, только там еще и if\case,а мой кусок кода это всего лиш пример работающей без сase\if. На форуме обсуждать идею создания дизасма я только начал, но в жизни - уже давно, и у меня есть соотв. инфо и исходники - и Olly имхо заслуживает внимания не намного больше остальных. zss Вот проги-"велосипеда" делающией рабочие asm файлы; правильно определяющей данные и ресурсы еще нет. Пока есть только неудачные разработки. Изменять переходы, и не только их, совсем не сложно, но для этого нужны совсем другие проги (ер. hiew - редактор; Soft-ice - поиск нужных мест в коде) |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.070 |