| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Asm для начинающих > Реализация дисассемблера |
| Автор: Ak47black 15.9.2009, 18:28 |
| Здравствуйте. У меня следующая ситуация. Мне нужно написать дисассамблер на tasm (16 битный) и так как некогда его ранее не писал, то столкнулся с некоторыми трудностями в написании, точнее не хватает знаний поэтому хотелбы спросить. Дошел до момента когда я перебираю байты кода и незнаю как тут правильнее поступить. Ну к примеру возьмём что код начинается с байта $33, тгда беру 6 бит с права и получаю 33h что по таблице соответствует команде xor. Теперь что мне непонятно тут: 1. Как установить что вся команда занимает 1 байт? (нужно-ли это определять по заранее заданой какойнибудь структуре.) 2. Где я могу найти хорошую таблицу oпкодов? 3. Как лучше всего сделать реализацию, существует-ли какаяето известная реализация/алгоритм. (Чтобы не изобретать так называемых "велосипедов", так как времени у меня мало, но хотелбы взять не готовый код, а сам написать) Добавлено @ 18:35 Тут с определение сколько именно команда занимает байт, то мне както туго понять |
| Автор: 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 -- лучше и не скажешь Добавлено @ 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 Есть из чего выбрать |
| Автор: Ak47black 16.9.2009, 11:03 |
| Благодарю за большое желание помочь. + Ну чтож буду пробовать углубятся. |