Анимация
JavaScript


Главная  Библионтека 

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

И его можно безболезненно редактировать в отличие от бинарного 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);

Поскольку только в исключительно редких случаях требуется модификация только что сгенерированного файла, то полезно будет создать макрос или функцию, включающую в себя приведенный выше текст. Это упросит ее вызов и позволит программисту не отвлекаться на посторонние мелочи.

операнд

Пояснения

type

Тип генерируемого файла

file habdle

Дескриптор открытого файла

Линейный адрес начала области для отображения в файле

Линейный адрес конца области для отображения в файле

flags

Флаги, управляющие, генерацией файла

ФАЙЛОВЫЙ ВВОД - ВЫВОД

IDA обладает развитым файловым вводом \ выводом, что открывает поистине неограниченные возможности. Можно самостоятельно загружать файлы любых форматов, можно создать отчеты и листинги любых видов. Можно распаковывать или модифицировать исполняемые файлы. Но даже при желании работать с принтером, или, например, модемом!

Все это богатство возможностей реализуется относительно небольшим набором стандартных функций Си. Работа с файлами в IDA - Си ничем не отличается от «классического» Си. За тем, может быть, исключением, что ввиду отсутствия массивов в их общепринятом понимании, используется посимвольный, а не блочный обмен.

long fopen

(char file,char mode);

Функция открывает файл и возвращает его обработчик в случае успешного завершения этой операции.

Прототип функции полностью совпадает с аналогичной функцией в стандартной библиотеке Си. Действительно, реализация этой функции в IDA только передает управление библиотечной функции qfopen(char *,char *) без какой - либо дополнительной обработки аргументов.

Необходимые атрибуты доступа задаются флагом mode в виде простой символьной строки. Их возможные значения будут показаны ниже.

Атрибут Назначение

Открывает файл для записи. Если файл не существует, то он автоматически создается. Содержимое любого непустого файла будет уничтожено начиная с текущей позиции (по умолчанию с

начала файла).

Открывает файл для чтения. Если указанный файл не существует,



то функция возвратит ошибку (NULL)

Открывает файл для записи и перемещает его указатель в конец, (то есть фактически открывает файл для до записи). Если указанный файл не существует, то он будет автоматически создан.

Открытие файла на запись и чтение. Если файл не существует, то функция возвратит ошибку

Открытие файла на запись и чтение. Если файл не существует, то он будет автоматически создан. Содержимое уже существующего файла будет уничтожено

Открывает файл на чтение и дозапись в конец. Если файл не существует, то он автоматически будет создан

Тип файла Пояснения

Открыть файл, как текстовой. В этом режиме символ CTRL-Z (ASCII 27) трактуется, как конец файла. Так же по-особому транслируется символ переноса \n. Компилятор превращает его в код 0xA. При записи же его в текстовой файл функция на самом деле поместит комбинацию 0xD 0xA - интерпретируемую сервисами MS-DOS и некоторыми элементами управления Windows, как перенос на следующую строку.

Часто с текстовыми файлами удобнее работать, открывая их как бинарные (смотри ниже)

Открыть файл как бинарный. В этом режиме все символы транслируются AS IS, без каких либо изменений.

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

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

Примеры использования: 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