|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Июл 28, 2004 03:18:30 |
|
|
Дата: Июл 28, 2004 17:38:44 Интересно ваше мнение насчет движка, и его перспектив. Я думаю пока нужно очень много доробатывать, у тебя посути работает только функция декодирования (disassemble), притом с ошибками, и не поддерживает полный набор команд (MMX/SSE/i32e). Ошибки которые сразу бросились в глаза: 1. Не реализовано перекрытие префиксов 2. Не реализована максимальная длина инструкции (15 байт) блоки if ... else if помоему лучше реализоваться через case. Остальное надо смотреть более детально |
|
|
Дата: Июл 28, 2004 18:29:26 Smile Хармер прав, очень слабенько. для сравнения можешь взять xde от z0mbie и посмотреть - там еще масса всяких ньюансов. кстати, xde кто-нить пробовал? я в нем сегодня ночью небольшой но серьезный еррор нашел. xset = reg2xset(flag & C_OPSZ8 ? 1 : diza->defdata, rm) работает не правильно. имхо надо xset = reg2xset(flag & C_DATA1 ? 1 : diza->defdata, rm) может еще кто какие баги находил? интересно было бы мнение The Svin'а по xde, мне вообще понравилось, хотя плотно я его еще не юзал. |
|
|
Дата: Июл 28, 2004 20:58:14 HarmEr FLUSH_PREFIX повторяюшийся перефикс сбрасывается, так сделанно в движке ОллиДебаг, это неправильно ? MMX/SSE добавлю Исправлю максимальную длину Движок изначально планировался как декодируюший, сейчас внесу некоторые изменения в структуру движка и добавлю информацию об операндах инструкции А насчет багов хм... мало тестировал Max Я и посматриваю понемногу :) |
|
|
Дата: Июл 28, 2004 22:10:15 · Поправил: HarmEr FLUSH_PREFIX повторяюшийся перефикс сбрасывается, так сделанно в движке ОллиДебаг, это неправильно ? На сколько я понял по логике у тебя префиксы отделяються от самой инструкции в случае повтора, а такого быть не должно.
tmp = *ip;
if (tmp == 0x66)
{
if (dis->os)
return FLUSH_PREFIX;
dis->os = *ip;
}
..............
err = disassemble (&dis, optbl);
if (err == FLUSH_PREFIX)
{
dis.len = 1;
}
else
if (err == ERROR)
{
if (tlen >= bufsize) return -1;
dis.len = 1;
}
Тоесть все опознавание префиксов ты должен перенести в функцию disassemble, если у инструкции несколько префиксов, например смена сегментов, то выбираеться послений, и с этим учетом формируеться длинна команды, и притом префиксы никто не запрещает повторять. В качестве теста рекоимендую сгенерить прогу, поставить несколько повторяющихся префиксов, и пройтись в SingleStepMode по этому участку, уверяю что пройдет оно все за 1 шаг. Я даже както делал такой фокус, ставил 14, 15 префиксов в SEH секцию перед, скажем nop, и если длина команды получалась <=15 байт то проц это хавал нормально, и SEH не срабатывал, а в случее превышения происходила ошибка. А вот "большинство дизасемблеров" на этом обламывались, потому как не умеют обрабатывать такое правильно. следующий пункт. Нужно ли переходить на опкоды, операнды и пр. в текстовом формате? в моем движке, по разбору полиморф кода, все строиться на преобразовании команд проца в команды VM, на основе команд VM производиться анализ кода. По моему мнению это достаточно эфективно. А визуализация на уровне мнемотик идет в самый последний момент. И это без труда позволяет реализовать, например, конвертацию синтаксиса Masm||Tasm<->AT&T & etc. |
|
|
Дата: Июл 29, 2004 00:48:11 Верно, если длина инструкции больше 15, вылетает с исключением и все перефиксы относятся к инструкции сгенерировавшей исключение. Нет, информация которую я собираюсь добавить нужна для анализа, т.к некоторые инструкции ипользую псевдооперанды к примеру lods(0xAC), out итд typedef struct dis_table { /* без изменений */ unsigned char base; unsigned long decode; /*****************/ unsigned char oper1, oper2, oper3; } dis_table; каждый операн содержит два поля, тип операнда (старшие 4бита) и его размер (младшие 4). Мне кажется этого вполне достаточно. |
|
|
Дата: Июл 29, 2004 12:45:57 · Поправил: HarmEr Давай дождемся следующего релиза и будем тестить Добавлено Еще посмотри по префиксам, помоему не перед всеми командами можно ставить любой префикс. Тоже должен вылетать фаулт в случае неправильного применения, особенно каксаеться префикса REP. Еще добавлю: Префиксы 0x66, 0x67 можно ставить преед условными переходами, для включения/отключения оптимизации ветвлений конвеером процов P4 и старше. Хотя интел и не рекомендует это использовать, но всеже проц это поддерживает. |
|
|
Дата: Авг 1, 2004 02:07:36 Вот и версия 0.2 - Длина инструкции 15, перекрываюшиеся перефиксы - Поправлен баг с декодированием знаковых данных - Сброс перефикса если в инструкции он указан как неприемлемый - Карата опкодов построена с использованием макросов, в стиле Intel manual opcode map + информация о каждом операнде инструкции (включая псевдооперанды) - Тестовая программа показывает типы и размер операндов В следуюшей версии добалю mmx/sse, тем самым расправлюсь с функцией декодирования и можно будет приступить к проработке анализа инструкции. _1408977776__dis_0.2.zip |
|
|
Дата: Авг 24, 2004 17:29:57 Появилось время заняться движком, вылаживаю версию 0.3 На его основе написан легенький бинарный дизассемблер dza Он не показывает названия инструкий, тк мне влом добавить name_id с индексом имени. По техническийм причинам убрал(возможно временно) перекрывающиеся перефиксы И снова mmx/sse не добавил, насколько я понял это будет сделанно уже в полностью готовом и отлаженном(ну-ну:) движке Сейчас немного посплю и добавлю имена инструкций _67185278__dis_0.3.zip |
|
|
Дата: Авг 27, 2004 02:23:36 · Поправил: Smile Всетаки с третьей версией я поспешил, можно сказать ламернулся... Во время тестирования нашел много мелких ошибок, и неправильно закодированных инструкци,исправил некоторые баги и недочеты, добавил индексы имен. Функции визуализации теперь печатают полноценные инструкции. Вообщем это первая стабильная версия. Тестировал с помошью OllyDbg 1.08b и Fasm 1.50, багов не нашел (разве что парочку в OllyDasmEngine:) |
|
|
Дата: Авг 27, 2004 02:30:03 |
|
|
Дата: Авг 30, 2004 20:00:44 Гм, проекту стукнул месяц, единственные конструктивные предолжения поступили только от HarmEr, остальные наверное стесьнялись:))) или совершенно не интересовались такой запаркой. Возможно кого-то разочаровали первые версии, или показались совершенно неработоспособными, это факт, на каждую версию, не считая первой, удалось выделить только 2-3дня, а ведь нужно еще и протестировать. Последняя версия является логическим завершением декодирования инструкций. Далее она мутирует в инструмен для анализа кода. |
|
|
Дата: Авг 31, 2004 06:21:14 Если будет время и возможность, здесь появится что-нибудь интересное или ссылка на сайт |
|
|
Дата: Авг 31, 2004 13:22:16 Smile единственные конструктивные предолжения поступили только от HarmEr, остальные наверное стесьнялись это ты зря :)) я его даже компилил(v0.4), и даже запускал, пытаясь подсунуть "стандартные" ляпы дизасмов. но, как ни странно, все работает (хотя плотно не проверял). я бы тебе посоветовал коменты понаписать в модуле, где табличка описана, а то хотел табличку проверить, но в той куче дефайнов хрен чего поймешь. |
|
|
Дата: Авг 31, 2004 21:02:18 Max но, как ни странно, все работает ничего странного, так и должно быть,а не будет поправим :)))) я бы тебе посоветовал коменты понаписать в модуле, где табличка описана, а то хотел табличку проверить, но в той куче дефайнов хрен чего поймешь. Обязательно добавлю в следующей версии. Кстати, дал движку имя - MDE (My Disassemble Engine :) |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.054 |