Анимация
JavaScript
|
Главная Библионтека while ((x=GetMarkedPos(a++)!=-1) Message("0x%X \n", x); Закладки не обязаны следовать одна за другой, и могут разделяться пустыми слотами. В этом случае приведенный выше код дойдет лишь до первой такой «дырки».
char GetMarkComment(long slot); Функция возвращает комментарий к закладке, расположенной по указанному slot. Подробнее о закладках можно прочитать в описании функции SetMarkedPos. Например: auto a; for (a=1;a<21;a++) if (GetMarkComment(a)!=-1) Message("%s \n", GetMarkComment (a)); ZwFilter MyMark1 WinALK aOpenFile Обратите внимание, что следующий код не является корректным: auto a,x; a=0; while ((x=GetMarkComment (a++)!=-1) Message("%s \n", x); Закладки не обязаны следовать одна за другой, и могут разделяться пустыми слотами. В этом случае приведенный выше код дойдет лишь до первой такой «дырки».
ГЕНЕРАЦИЯ ВЫХОДНЫХ фАЙЛОВ int GenerateFile(long type, long file handle, long ea1, long ea2, long flags); Функция генерирует выходной файл. Аналогичена по действию команде меню «~File\Produce output file». Типичный пример использования приведен в файле Analyst.idc, поставляемым вместе с IDA. Допустимы следующие типы отчетов:
MAP-файл записывается в стандарте Borland и выглядит приблизительно следующим образом: Start Stop Length Name OOOOOH 032E9H 032EAH segOOO Class CODE Address Publics by Value
Program entry point at 0000:22C0 Он обычно используется для облегчения отладки программ. В коде становится легче ориентироваться по символьным меткам, переменным и функциям. Например, вместо абсолютного адреса для точки останова можно указывать его имя. Говорящие названия улучшают восприятие кода и не дают запутаться и повторно возвращаться к уже проанализированным фрагментам. Указанный формат поддерживают Borland Turbo Debuger, Periscope, а так же другие отладчики. Популярный Soft-Ice имеет в стандартной поставке конвертор, преобразующий такие файлы к своему собственному формату. Некоторые отладчики не поддерживают сегментацию, а другие имеют ограничение на количество имен, поэтому генерацией файла можно управлять. Для этого определены следующие значения флага flag:
«Dummy» имена представляют собой автоматически генерируемые IDA имена, используемые для определения меток, процедур и данных. Они выглядят в виде sub , loc , off , seg и так далее. Обычно с целью не захламления листинга они не включаются в файл. EXE файл генерируется после того, как программа была изменена функциями PatchByte или PatchWord. Эти функции не изменяют оригинального файла, а только содержимое базы IDA, и что бы изменения возымели действия необходимо сгенерировать новый файл. К сожалению IDA поддерживает очень ограниченный список форматов. Вот это и все, что можно получить на выходе: 1. MS DOS .exe 2. MS DOS .com 3. MS DOS .drv 4. MS DOS .sys 5. general binary 6. Intel Hex Object Format 7. MOS Technology Hex Object Format При этом exe файл генерируется заново. Он содержит ту же таблицу перемещаемых элементов (то есть ее невозможно изменить), а все неиспользуемые структуры заполняются нулями. Следует иметь ввиду, что некоторые программы чувствительны к таким изменениям и откажут в работе. К сожалению, не поддерживаются Pe и другие Win32 файлы. В этом случае (а так же когда exe файл чувствителен к неиспользуемым полям, - например, в свободное пространство заголовка иногда может быть помещен оверлей) можно сохранить различия в DIF файле и затем любой из поддерживающих его многочисленных утилит модифицировать оригинальный файл. IDA позволяет сохранять базу в виде текстового IDC файла. Это обеспечивает ее переносимость между различными версиями. Дело в том, что основной рабочий формат IDB в любой момент может измениться и база перестанет загружаться в новые версии. Для преодоления этой проблемы и был введен текстовой формат. Заметим, что это далеко не вся база и часть информации оказывается необратимо утерянной, например, отсутствует виртуальная память и для анализа вновь потребуется исходный файл, кроме того, загружаться IDC файл будет гораздо медленнее IDB, поскольку потребуется вновь все заново дизассемблировать. Поэтому применять данный формат в качестве рабочего совершенно бессмысленно. Но что же представляет из себя IDC файл? Как нетрудно догадаться по его расширению это обыкновенный скрипт! static Segments(void) { SegCreate(0x10000,0x132ea,0x1000,0,1,2); SegRename(0x10000,"seg000"); SegClass (0x10000,"CODE"); SetSegmentType(0x10000,2); 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 |