Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Asm для начинающих > Реализация дисассемблера


Автор: Ak47black 15.9.2009, 18:28
Здравствуйте.
У меня следующая ситуация. Мне нужно написать дисассамблер на tasm (16 битный) и так как некогда его ранее не писал, то столкнулся с некоторыми трудностями в написании, точнее не хватает знаний поэтому хотелбы спросить.

Дошел до момента когда я перебираю байты кода и незнаю как тут правильнее поступить.
Ну к примеру возьмём что код начинается с байта $33, тгда беру 6 бит с права и получаю 33h что по таблице соответствует команде xor.
Теперь что мне непонятно тут:
1. Как установить что вся команда занимает 1 байт? (нужно-ли это определять по заранее заданой какойнибудь структуре.)
2. Где я могу найти хорошую таблицу oпкодов?
3. Как лучше всего сделать реализацию, существует-ли какаяето известная реализация/алгоритм. (Чтобы не изобретать так называемых "велосипедов", так как времени у меня мало, но хотелбы взять не готовый код, а сам написать)

Добавлено @ 18:35
Тут с определение сколько именно команда занимает байт, то мне както туго понять  smile 

Автор: Mikl_ 16.9.2009, 03:35
Ak47black, 
Для начала я бы проверял не префикс ли это, их не так много 
Operand-size override prefix (66h) Address-size override prefix (67h)
Префиксы повторения "rep", "repe"/"repz" F2 и "repne"/"repnz" F3
0F FF префиксы многобайтовых команд
Префикс переопределения сегмента cs:(2Eh),ds:(3Eh),fs(64h):,gs:(65h),es:(26h),ss:(36h)
префиксы команд FPU Кодировка всех команд блока FPU начинается с 11011xxx (с 0D8h по 0DFh) (ESC1-ESC7 «ESC-коды»)
если не префикс то пытаешься расшифровать команду
очень хорошо о дешифровке команд написано http://www.wasm.ru/series.php?sid=16
Лично я бы распотрошил какой-нибудь дизассемблер (несколько дизассемблеров) и не изобретал велосипед
Во вложении таблица с опкодами

Автор: Mikl_ 16.9.2009, 05:48
Ak47black, 
Посмотри внимательно эту http://www.wasm.ru/forum/viewtopic.php?id=10573 -- лучше и не скажешь smile

Добавлено @ 06:02
Ak47black, 
а вот рабочая ссылка на дизассемблер с открытым исходным кодом. По уверениям автора, специально разработан для тех случаев, когда дело приходится иметь с какой-нибудь гадостью, которая специально калечит опкода. Обычные дизасмы на таком просто падают. Свободен для некоммерческого использования. http://www.wasm.ru/baixado.php?mode=tool&id=350 А на http://www.wasm.ru есть целый раздел http://www.wasm.ru/toollist.php?list=13 Есть из чего выбрать  smile Да и по другим сайтам можно походить Во вложении дизассемблер от ollydbg -- раскурочь его  smile и будет тебе счастье!

Автор: Ak47black 16.9.2009, 11:03
Благодарю за большое желание помочь. +
Ну чтож буду пробовать углубятся.  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)