Поалуйста посоветуйте по какому пути пойти, вот есть hex строка, надо сделать код, что ваще делать как начать тупо case выбирать оппкод и там по обстоятельствам или как? Просто не знаю с чего начать а там легче будет.
Курить мануалы от интел, и искать в goolgle исходники других дизассемблеров. По себе скажу, что от исходников дизасмов толку мало, а мануалы рулят.
Я пишу свуй дизассемблер и поэтому код приведённый мне не поможет, а мне просто нужен совет как построить программу и всё!
Ты исходники смотреть не хочешь, мануалы читать тоже, что ты хочешь, чтоб тебе кто-то накатал ? Сказали в мануалах интела вся суть изложена. Какой тебе совет дать??? Читаешь файл и парсишь, согласно инфе Интела.
Что значит свой? Все известно! Тут только вопрос техники и оптимальности, лучше, чем Microsoft, вряд-ли напишешь.
Сомневаюсь, либа малкософта сильно хромает на нестандартных опкодах и с этим ничего не поделать. Достоинство своего дизассемблера прежде всего в том, что его можно заточить под нужные тебе задачи, и для них он будет куда лучше мелкософтовского.
08Bh,11000010b ;MOV EAX,EDX Если я думаю правильно, то алгоритм будет такой т.е. читаем опкод и case'ом выбираем способ расшифровки для него. diasm() { switch (op) { case опкод: рашифрорка; break; case 08Bh: //расшифровка узнаём значение Mod(11); опазнаём 1 ый регистр (000 = EAX); 2 регистр(010 = EBX); //конец расшифровки break; case опкод: рашифрорка; break; default: возвращяем ошибку; } Скажите правильно ли я мыслю?
Мда, с такой архитектурой далеко не уйдешь Нужно декодировать команду не по значению опкода, а по его характеристикам. Тоесть нужны таблицы описывающие характеристики всех опкодов (имеющиеся в них поля, набор параметров, их размеры, и.т.д.). Таблицы строятся так, чтобы опкод команды был индексом описывающего ее элемента. Дизассемблер выбирает характеристики опкода из таблицы, после чего декодирует опкод уже по набору этих характеристик. Такая архитектура использована в моем дизассемблере, и я считаю ее оптимальной. Можно также расположить все характеристики опкодов и данные для их декодирования подряд, и потом перебором искать опкод в такой таблице. При этом таблицы будут занимать меньший размер, но производительность будет существенно ниже. (это применено например в OllyDasm). Короче говоря, поизучай сорцы разных дизасмов. P.S. мой дизасм брать здесь
"Достоинство своего дизассемблера прежде всего в том, что его можно заточить под нужные тебе задачи" А какие такие особенные задачи кроме дизассемблирования бинарного кода ты можешь назвать?
Ну дык дизассемблировать этот бинарный код можно по разному, иногда достаточно простого вывода текста, а иногда надо получать развернутую структуру описывающую каждую команду (например при применении в метаморфе или ВМ). Иногда требуется аналих групп команд, выделение среди них каких-либо последовательностей и.т.д, но это уже ближе к задачам декомпиляции чем дизассемблирования. Короче говоря, не все дизассемблеры одинаково полезны
Дизм мне нужен для отладчика, к тому же хочу крос платформенный, и ещё и с анализатором, тут без своего диасма конечно можно но лучше свой накатать. ЗЫ спасибо за помощь именно с архиектурой я и мучаюсь, топик пока не закрывайте... ЗЫЫ теперь ОлиДбг изучу получше в сфере новоузнанной инфы
Извините а какие характиристики должны быть, я думаю кол-во операторов, тип 1 и второго операторов(регстр, память число) Мыслю правильно? И скажите ещё ченить уж больно помогает
process nado delit na 2 chasti. 1. decoder prefixes opcode modrm sib displacement immediate 2. disassembler command operand1 operand2 operand3 ya pishu odin tool dlya kotorogo nujna dasm, perviy chast uje pisal (dovolno bistriy i vse eto xranit v odnom DWORD), a vtoroy uje na pol puti
Как я понял надо сначало раскидать команду а потом, дазасемблировать, ладно пока буду пробовать если еть где инфа подкинте. PS я бы уже начал, но Принц Персии 2 помешал(3 ночи не спал, озверенная игрeха, ну да ладна от дахаки избавился
Поидее по любому тебе придется их сначала декодировать, потому что команды бывают разной длины + суфиксы тоже бывают и приставки Напиши плиз дизасм под arm
2hacker Neo это прикол? Почитал идея проца просто замечательна. Архитектура ARM (Advanced RISC Machines) разработана в 1983-85 годах в компании Acorn Computers. Команда Роджера Вильсона и Стива Фербера взяла за основу набора инструкций ARM некогда популярный, а ныне забытый процессор MOS Technology 6502 и снабдила его специальным четырехбитным кодом условия, которым можно было дополнить любую инструкцию. ЗЫ если есть доки по теме кинте ссылку а то гугль всяку чушь выдаёт
Руками дизаасемблировать код я могу (калькулятор + книга двойных слов ака мануалы интела), но вопрос остался открытым сам аллгоритм, вот моё предположение пробиваем по базе 1 и 2 оператор и базовый опкод(если нужен); разбивае команду; Впринцепе усё, но хотелбы сразу узнать не понадобиться ли мне хранить еще какуенить информацию об команндах