Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ida.final.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
6 Mб
Скачать

Файловый ввод – вывод

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

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

Long fopen (char file,char mode);

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

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

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

Атрибут

Назначение

w

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

r

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

a

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

r+

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

w+

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

a+

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

Тип файла

Пояснения

t

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

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

b

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

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

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

Примеры использования:

Del file.dem

Message(“0x%X \n”,fopen(“file.dem”,”wb”);

1

dir file.dem

file.dem 0 11.11.99 13:33 file.dem

Message(“0x%X \n”,fopen(“Long File Name”,”wb”);

1

dir longfi~1

LONGFI~1 0 11.11.99 15:06 Long File Name

Message(“0x%X \n”,fopen(“myfile”,”r+b”);

0

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

Часто забывают, что в Windows сохранилась поддержка имен устройств, идущая еще со времен CP\M. Поэтому, что бы вывести данные на печать достаточно открыть на запись устройство “PRN” и направить в него необходимые данные.

Например:

writestr(fopen(“PRN”,”wt”),”Hello,Printer!”);

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

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

Операнд

Пояснения

File

Имя файла (при необходимости с полным или частичным путем). Обе версии IDA (консольная и GUI) поддерживает длинные файлы.

mode

Атрибуты доступа и типа файла.

Return

Завершение

Пояснения

Успешное

Дескриптор открытого файла (!=0)

Ошибка

==0

Закрытие всех открытых файлов гарантируется только при корректном выходе из IDA. И хотя, несмотря, на то, что операционная система гарантированно закроет все файлы, порожденные любым процессом (в том числе и IDA) при его завершении, может потеряться часть данных, которая в этом момент находилась во внутренних буферах IDA и еще не была записана на диск.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]