Процесс разработки диз/ассемблера

Тема в разделе "WASM.ASSEMBLER", создана пользователем spa, 3 янв 2006.

  1. spa

    spa Active Member

    Публикаций:
    0
    Регистрация:
    9 мар 2005
    Сообщения:
    2.240
    Поалуйста посоветуйте по какому пути пойти, вот есть hex строка, надо сделать код, что ваще делать как начать тупо case выбирать оппкод и там по обстоятельствам или как? Просто не знаю с чего начать а там легче будет.
     
  2. Ms Rem

    Ms Rem New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2005
    Сообщения:
    1.057
    Адрес:
    С планеты "Земля"


    Курить мануалы от интел, и искать в goolgle исходники других дизассемблеров. По себе скажу, что от исходников дизасмов толку мало, а мануалы рулят.
     
  3. spa

    spa Active Member

    Публикаций:
    0
    Регистрация:
    9 мар 2005
    Сообщения:
    2.240
    Мануалы я прочел, и на васме статьи тоже, но не знаю как построить дизассемблер подскажите.
     
  4. crypto

    crypto Active Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    2.533
    Спустись на 13 строчек ниже и посмотри на код, который я выложил... Как вызвать, сам сообразишь.
     
  5. spa

    spa Active Member

    Публикаций:
    0
    Регистрация:
    9 мар 2005
    Сообщения:
    2.240
    Я пишу свуй дизассемблер и поэтому код приведённый мне не поможет, а мне просто нужен совет как построить программу и всё!
     
  6. MegaZu

    MegaZu New Member

    Публикаций:
    0
    Регистрация:
    22 июл 2005
    Сообщения:
    290
    Ты исходники смотреть не хочешь, мануалы читать тоже, что ты хочешь, чтоб тебе кто-то накатал ?



    Сказали в мануалах интела вся суть изложена.



    Какой тебе совет дать??? Читаешь файл и парсишь, согласно инфе Интела.
     
  7. crypto

    crypto Active Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    2.533
    Что значит свой? Все известно! Тут только вопрос техники и оптимальности, лучше, чем Microsoft, вряд-ли напишешь.
     
  8. Ms Rem

    Ms Rem New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2005
    Сообщения:
    1.057
    Адрес:
    С планеты "Земля"


    Сомневаюсь, либа малкософта сильно хромает на нестандартных опкодах и с этим ничего не поделать. Достоинство своего дизассемблера прежде всего в том, что его можно заточить под нужные тебе задачи, и для них он будет куда лучше мелкософтовского.
     
  9. spa

    spa Active Member

    Публикаций:
    0
    Регистрация:
    9 мар 2005
    Сообщения:
    2.240
    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:

    возвращяем ошибку;

    }

    Скажите правильно ли я мыслю?
     
  10. Ms Rem

    Ms Rem New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2005
    Сообщения:
    1.057
    Адрес:
    С планеты "Земля"
    Мда, с такой архитектурой далеко не уйдешь :)

    Нужно декодировать команду не по значению опкода, а по его характеристикам. Тоесть нужны таблицы описывающие характеристики всех опкодов (имеющиеся в них поля, набор параметров, их размеры, и.т.д.).

    Таблицы строятся так, чтобы опкод команды был индексом описывающего ее элемента. Дизассемблер выбирает характеристики опкода из таблицы, после чего декодирует опкод уже по набору этих характеристик.

    Такая архитектура использована в моем дизассемблере, и я считаю ее оптимальной.

    Можно также расположить все характеристики опкодов и данные для их декодирования подряд, и потом перебором искать опкод в такой таблице. При этом таблицы будут занимать меньший размер, но производительность будет существенно ниже. (это применено например в OllyDasm).

    Короче говоря, поизучай сорцы разных дизасмов.



    P.S. мой дизасм брать здесь
     
  11. crypto

    crypto Active Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    2.533
    "Достоинство своего дизассемблера прежде всего в том, что его можно заточить под нужные тебе задачи"

    А какие такие особенные задачи кроме дизассемблирования бинарного кода ты можешь назвать?
     
  12. Ms Rem

    Ms Rem New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2005
    Сообщения:
    1.057
    Адрес:
    С планеты "Земля"


    Ну дык дизассемблировать этот бинарный код можно по разному, иногда достаточно простого вывода текста, а иногда надо получать развернутую структуру описывающую каждую команду (например при применении в метаморфе или ВМ).

    Иногда требуется аналих групп команд, выделение среди них каких-либо последовательностей и.т.д, но это уже ближе к задачам декомпиляции чем дизассемблирования.

    Короче говоря, не все дизассемблеры одинаково полезны :)
     
  13. crypto

    crypto Active Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    2.533
    Теперь осталось выяснить у SPA, какая перед ним стоит задача...
     
  14. spa

    spa Active Member

    Публикаций:
    0
    Регистрация:
    9 мар 2005
    Сообщения:
    2.240
    Дизм мне нужен для отладчика, к тому же хочу крос платформенный, и ещё и с анализатором, тут без своего диасма конечно можно но лучше свой накатать.



    ЗЫ спасибо за помощь именно с архиектурой я и мучаюсь, топик пока не закрывайте...



    ЗЫЫ теперь ОлиДбг изучу получше в сфере новоузнанной инфы ;)
     
  15. spa

    spa Active Member

    Публикаций:
    0
    Регистрация:
    9 мар 2005
    Сообщения:
    2.240
    Извините а какие характиристики должны быть, я думаю кол-во операторов, тип 1 и второго операторов(регстр, память число)

    Мыслю правильно?

    И скажите ещё ченить уж больно помогает :)
     
  16. xnko

    xnko New Member

    Публикаций:
    0
    Регистрация:
    5 янв 2006
    Сообщения:
    9
    Адрес:
    Armenia
    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
     
  17. spa

    spa Active Member

    Публикаций:
    0
    Регистрация:
    9 мар 2005
    Сообщения:
    2.240
    Как я понял надо сначало раскидать команду а потом, дазасемблировать, ладно пока буду пробовать если еть где инфа подкинте.



    PS я бы уже начал, но Принц Персии 2 помешал(3 ночи не спал, озверенная игрeха, ну да ладна от дахаки избавился ;)
     
  18. hacker Neo

    hacker Neo New Member

    Публикаций:
    0
    Регистрация:
    31 окт 2004
    Сообщения:
    8
    Поидее по любому тебе придется их сначала декодировать, потому что команды бывают разной длины + суфиксы тоже бывают и приставки

    Напиши плиз дизасм под arm
     
  19. spa

    spa Active Member

    Публикаций:
    0
    Регистрация:
    9 мар 2005
    Сообщения:
    2.240
    2hacker Neo это прикол?

    Почитал идея проца просто замечательна.



    Архитектура ARM (Advanced RISC Machines) разработана в 1983-85 годах в компании Acorn Computers. Команда Роджера Вильсона и Стива Фербера взяла за основу набора инструкций ARM некогда популярный, а ныне забытый процессор MOS Technology 6502 и снабдила его специальным четырехбитным кодом условия, которым можно было дополнить любую инструкцию.





    ЗЫ если есть доки по теме кинте ссылку а то гугль всяку чушь выдаёт
     
  20. spa

    spa Active Member

    Публикаций:
    0
    Регистрация:
    9 мар 2005
    Сообщения:
    2.240
    Руками дизаасемблировать код я могу (калькулятор + книга двойных слов ака мануалы интела), но вопрос остался открытым сам аллгоритм, вот моё предположение



    пробиваем по базе 1 и 2 оператор и базовый опкод(если нужен);



    разбивае команду;



    Впринцепе усё, но хотелбы сразу узнать не понадобиться ли мне хранить еще какуенить информацию об команндах