Понимаю, что темы уже были, но там не то. Хочу задать пару конкретных вопросов У меня такой вопрос... блин даж не знаю с чего начать... ну вот инструкция имеет такой формат: байт префикса, байт кода, байт ModR/M, байт SIB, imm, displacement. Естественно обязателен только байт кода. С префиксом всё понятно, тупо через cmp проверяем. Дальше идёт code. Вот тут начинаются вопросы... Как узнал из неоторых книг, code может иметь следующий формат: yyyyy:xxx (например push <reg>) где yyyyy - код инструкции, xxx - регситр ---------------------------------------------------------------------------- PUSH EAX --> Let’s study this instruction The opcode for this mnemonic is 0x50, looking at the opcode as a single byte doesn’t help us a lot, so let’s look at the binary form of this opcode. 0x50 == 01010000b and then let’s make the 8-Bits look like this --> 01010:000 == Код (Text): <rrr> What we’ve done is that we grouped the leftmost 5-Bits together (CODE) and the the rightmost three bits together (register). • The 5-Bits (01010) are the [CODE] block responsible for the instruction (PUSH <reg>) • The 3-Bits (000) are the <rrr> or the register code for the register (eax) ---------------------------------------------------------------------------- а может иметь вот такой yyyyyy.d.w где yyyyyy - код инструкции, d - направление (reg->imm), w - размер (dword/byte) ну ту ещё ModR/M будет. Вот пример: 8BD0 MOV EDX,EAX [100010.1.1][11.010.000] byte code ModR/M Вопрос в следующем: Как дизассемблеры длин отличают первый формат,от второго и узнают о наличии ModR/M? Хотел сам ответить на свой вопрос и скачал HDE (маленький такой дизасм длин). Потрасерив пример и почитав сорсы, сделал вывод. Он проверяет на наличие префикса, если оного нет, прибавляет к началу некой таблицы (содержащий байты и пронумерованную от 0 до FF) значение code, получая некую константу забитую в таблицу. Далее взависимости от неё он и пляшет, т.е. либо считывает значения из ModR/M и SIB, либо сразу переходит в конец и считает длину (тут много вариантов). Тогда заданный вопрос отпадает и возникает следующий: Неужели незя обойтись без таблицы? да и: [quote]Taha (00:34:11 28/03/2007) hde ProTeuS (00:34:30 28/03/2007) сорцы ж есть )[/quote] А я не понял где смеяться) Мож кто объяснит. В конце книги приведён скелет дизассемблера ---------------------------------------------------------------------------------- – Use this byte to jump to the necessary procedure to decode this byte (using a jump-table) • The (jump-table) will -jump to the corresponding decoding procedure for each [CODE] byte • Each decoding procedure will use (all/some) of the following procedures · A procedure t... ---------------------------------------------------------------------------------- И это всёже значит - от таблицы не убежишь?
сенкс а вот по поводу hde... что там смешного? я так и не узнал. вот линк http://patkov-site.narod.ru/download/hde.zip
_taha_ Лучше делать таблицу - размер для таких вещей критичен. Глять Catch32. Хотябы на него стоит равняться.
я бы сказал, не глянь, а применяй! Этот движок прошел хорошее тестирование и профессионалами проверен! Смысл изобретать новые грабли?
EvilsInterrupt В принцыпе ты прав. Я сам его юзал. И знаю что он проверен реально профессионалами. 1.4 кб весит если не ошибаюсь. Что еще надо для счастья А так хотелось бы такое же чудо но для x86_64 платформы.
TermoSINteZ Зная автора этого проекта, я думаю если кто продолжит его проект, он даже обрадуется! Но это мое мнение
перерыл все поисковики, ничего.... поиск по форуму ничего не дал... в асе ни у кого нет... потом заметил вобщем Catchy32 ))))) спасибо большое, буду разбираться
Разобрался ? P.S. Рекомендую разбираться со стаканом анаши, под коей он и писался. А для ...64 придется наверное 2 уже.