Анимация
JavaScript
|
Главная Библионтека И его можно безболезненно редактировать в отличие от бинарного IDB формата. Например, если IDA что-то неправильно дизассемблирует, то положение будет нетрудно исправить, отредактировав нужным образом скрипт. LST представляет собой копию дизассемблированного файла, в том виде, в каком он отображается на экране IDA. Выглядит он приблизительно так: seg000:0100 loc 0 100: seg000:0100 cmp byte ptr [bx+si], 0 seg000:0103 jz loc 0 108 seg000:0105 inc bx seg000:0106 jmp short loc 0 100 Разумеется, он не пригоден для последующего ассемблирования и может использоваться только в качестве «твердой копии экрана». В демонстрационной версии генерация LST файла не поддерживается. ASM файл - это дизассемблированный файл полностью готовый к ассемблированию. Выглядит он следующим образом: p5 8 6n ; Segment type: Pure code segOOO segment byte public CODE use16 assume cs:seg000 assume es:nothing, ss:nothing, ds:nothing, fs:nothing, ; S U B R O U T I N E sub 0 0 proc near ; CODE XREF: sub 0 22DD+1E p push ax push bx push cx push dx mov ax, 3D02h В демонстрационных версиях вывод дизассемблированного текста в ASM файл не поддерживается. DIF хранит в себе результаты сравнения оригинального и модифицированного функциями PatchByte и PatchWord файлов. Для некоторых форматов IDA позволяет генерировать исполняемый (или бинарный) файл, с учетом изменений. Однако в большинстве случаев этих возможностей оказывается недостаточно (например, не поддерживаются Win32 форматы) и тогда приходится прибегать к сохранению всех изменений в отдельном файле. Формат его показан ниже: This difference file is created by The Interactive Disassembler xsafe-iv.exe 00002390: 0C 11 В нем нетрудно распознать типичный crk файл, который поддерживается многими утилитами (например, cra386) или модифицировать исходный файл вручную. Несложно написать скрипт на IDA-си, который будет выполнять такую работу автоматически. Для генерации любого типа файлов требуется задать виртуальный адрес начала и конца области. Если требуется вывести файл целиком, то в качестве адреса начала можно задать 0, а в качестве конца константу BADADDR или -1. Функция GenerateFile не работает с именами файлов, она требует дескриптора уже открытого на запись файла. В упрощенном виде ее вызов может выглядеть так: auto a; a=fopen("myfile.ext","wt"); GenerateFile (OFILE ASM, a, 0, -1,0); fclose (a); Поскольку только в исключительно редких случаях требуется модификация только что сгенерированного файла, то полезно будет создать макрос или функцию, включающую в себя приведенный выше текст. Это упросит ее вызов и позволит программисту не отвлекаться на посторонние мелочи.
ФАЙЛОВЫЙ ВВОД - ВЫВОД IDA обладает развитым файловым вводом \ выводом, что открывает поистине неограниченные возможности. Можно самостоятельно загружать файлы любых форматов, можно создать отчеты и листинги любых видов. Можно распаковывать или модифицировать исполняемые файлы. Но даже при желании работать с принтером, или, например, модемом! Все это богатство возможностей реализуется относительно небольшим набором стандартных функций Си. Работа с файлами в IDA - Си ничем не отличается от «классического» Си. За тем, может быть, исключением, что ввиду отсутствия массивов в их общепринятом понимании, используется посимвольный, а не блочный обмен. long fopen (char file,char mode); Функция открывает файл и возвращает его обработчик в случае успешного завершения этой операции. Прототип функции полностью совпадает с аналогичной функцией в стандартной библиотеке Си. Действительно, реализация этой функции в IDA только передает управление библиотечной функции qfopen(char *,char *) без какой - либо дополнительной обработки аргументов. Необходимые атрибуты доступа задаются флагом mode в виде простой символьной строки. Их возможные значения будут показаны ниже. Атрибут Назначение Открывает файл для записи. Если файл не существует, то он автоматически создается. Содержимое любого непустого файла будет уничтожено начиная с текущей позиции (по умолчанию с начала файла). Открывает файл для чтения. Если указанный файл не существует,
Функцию необходимо вызвать обязательно с указанием атрибута доступа и типа файла, иначе она завершиться с ошибкой. Если файл по каким-то причинам открыть не удалось, то функция возвратит ноль, в противном случае дескриптор открытого файла. Примеры использования: Del file.dem Message( 0x%X \n",fopen("file.dem","wb"); dir file.dem file.dem 0 11.11.99 13:33 file.dem Message( 0x%X \n",fopen("Long File Name","wb"); dir longfi~1 LONGFI~1 0 11.11.99 15:06 Long File Name Message("0x%X \n",fopen("myfile","r+b"); Обратите внимание, что IDA возвращает один и тот же обработчик при открытии различных файлов, хотя прежние файлы не были явно закрыты. Это говорит о том, что они закрываются автоматически, после того как скрипт завершит свою работу. Часто забывают, что в Windows сохранилась поддержка имен устройств, идущая еще со времен CP\M. Поэтому, что бы вывести данные на печать достаточно открыть на 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 [ 111 ] 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 |