Набор статей и руководств по дизассемблеру 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, она генерирует файл, в котором будут прописаны в таком виде мнемоники всех инструкций из файла заголовков.




Начало  Назад  Вперед



Книжный магазин