Набор статей и руководств по дизассемблеру IDA

             

Конвертор inst.pl


Как Вы уже могли догадаться, я не руками формирую файл x86data.c. Эту идею я позаимствовал из Nasma - создаётся файл с данными, в удобном для обращения с ним формате, а уже из него генерируется файл на C. Для подобных манипуляций предназначен script на любимом мною Perlе inst.pl.

Он запускается примерно так:

perl inst.pl [параметры командной строки]

где параметры могут быть следующими:

  • -c file

    Проверить файл заголовков на наличие ошибок. В настоящее время реализованы только две проверки - на наличие дублирующихся itype, а также поиск пропущенных itype. Отчёт помещается в file.

  • -d file

    Задаёт имя файла данных. Имя по умолчанию - data

  • -i file

    Задаёт имя файла заголовков. Имя по умолчанию - x86.h

  • -n file

    Генерирует файл-шаблон file для дальнейшего заполнения его данными.

  • -o file

    Устанавливает имя выходного файла. Имя по умолчанию - x86data.c. Если выходной файл уже существует - программа сообщает об этом и завершает исполнение, существующий файл не модифицируется.

  • -s

    Игнорировать инструкции из файла заголовков, помеченные комментариями с тремя вопросительными знаками.

  • -?

    Показывает краткую инструкцию по использованию программы...

  • Эта замечательная программа сильно сокращает время создания файла с данными. Она автоматизирует проверку файла заголовков, может сгенерировать файл шаблон для дальнейшего заполнения его данными, и самое главное - она сама генерирует файл с данными, при этом проверяя его правильность и производя оптимизацию по размеру - структуры с одинаковыми данными представлены в выходном файле только один раз, используются несколько указателей на эти структуры. В случае же, если я (или кто-либо ещё) захочет добавить ещё какие-либо характеристики к каждой инструкции, script можно легко переписать для включения в него необходимой функциональности.

    Формат входного файла для inst.pl:

    # комментарии [имя инструкции] keyword: data ...

    [имя инструкции] - это название инструкции, взятое из файла заголовков. Я не использую численных значений (хотя это было бы быстрее в обработке) по той причине, что Вам всё равно нужно будет для каждого численного значения находить мнемоническое имя из файла заголовков. Когда inst.pl запускается с ключом -n, она генерирует файл, в котором будут прописаны в таком виде мнемоники всех инструкций из файла заголовков.


    keyword: data - характеристики инструкции. В настоящее время программа понимает следующие keyword:


    • cflags

      Изменяемые инструкцией флаги. Можно указывать как большими, так и маленькими буквами.


    • rflags

      Флаги, от которых зависит результат выполнения инструкции. Можно указывать как большими, так и маленькими буквами.


    • uflags

      Флаги, состояние которых не определено после выполнения инструкции. Можно указывать как большими, так и маленькими буквами.


    • regs

      Самое главное (собственно, ради чего и была написана библиотека) - регистры, изменяемые инструкцией. Можно указывать как большими, так и маленькими буквами.


    • op

      Битовая маска операндов, изменяемых инструкцией. Для операнда 1 используется первый бит, для операнда 2 - второй, и т.д.


    • type

      Тип инструкции (FPU, MMX и т.д.). Можно указывать как большими, так и маленькими буквами.


    • from

      Указывает тип процессора, начиная с которого инструкция распознаётся. Можно указывать как большими, так и маленькими буквами.


    • fcflags

      Флаги FPU, изменяемые инструкцией. В настоящее время не помещаются в выходной файл. Можно указывать как большими, так и маленькими буквами.


    • fuflags

      Флаги FPU, состояние которых не определено после выполнения инструкции. В настоящее время не помещаются в выходной файл. Можно указывать как большими, так и маленькими буквами.


    • Для cflags,rflags,uflags & regs производится проверка на наличие дублирующих данных (в случае их обнаружения они просто игнорируются). Каждый keyword должен присутствовать для одной инструкции не более одного раза.


      Содержание  Назад  Вперед







      Forekc.ru
      Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий