Анимация
JavaScript
|
Главная Библионтека INF FILETYPE Это поле содержит короткое целое, хранящее тип дизассемблируемого файла. Видимо не используется IDA, поскольку может безболезненно модифицироваться произвольными значениями, что не нарушает работоспособности. Так же следует учитывать, что в версии 3.84 функция возвращает неверные значения. Дело в том, что IDC.IDC не был изменен, тогда как были расширены типы файлов, начиная с середины таблицы, от чего все типы «посыпались». MS-DOS exe файл стал определятся как программный файл PalmPilot, что хотя и не нарушало работоспособности IDA, но не позволяло определить тип текущего файла. В IDC.IDC содержится ссылка на файл core.hpp. На самом деле это опечатка и нужно смотреть ida.hpp, входящий в IDA SDK. Там мы обнаружим прелюбопытную структуру, описывающую типы поддерживаемых файлов. Сравнив ее с IDC.IDC можно обнаружить различие, которое показано ниже:
Что бы функция возвращала правильный результат, необходимо исключить тип FT USER и перенумеровать остаток списка. Расшифровка всех значений приведена ниже:
Пример использования: Message("%d \n", GetShortPrm(INF FILETYPE) INF OSTYPE Короткое целое хранящее тип операционной системы для загруженного файла (не среды запуска дизассемблера!) Должна принимать следующие значения:
Да, именно должна, ибо MS-DOS файлы возвращают ноль, а не единицу и, следовательно, OSTYPE MSDOS не сработает. Пример использования: Message("%d \n", GetShortPrm(INF OSTYPE) INF APPTYPE Короткое целое, содержащие информацию о типе дизассемблируемого приложения. Часть полей (APPT CONSOLE, APPT GRAPHIC, APPT 1THREAD, APPT MTHREAD) инициализируются FLIRT. Если исследуемой программе не соответствует ни одна библиотека сигнатур и FLIRT не сработал, то все вышеперечисленны поля будут содержать нулевые значения. Тип приложения (EXE\DLL\DRIVER) не актуален для MS-DOS программ, как и разрядность (16 или 32 бит). В этом случае функция всегда возвращает нулевое значение.
Пример использования: Message("%x \n", GetShortPrm(INF APPTYPE) INF START SP Длинное целое, содержащие значение регистра SP (ESP) при запуске программы. Для получения этой информации IDA читает соответствующие поля заголовка файла. В противном случае (например, для com или дампов памяти) она устанавливает SP на верхушку сегмента, то есть присваивает ему значение -1. Для бинарных файлов и дампов памяти это оказывается не всегда справедливо (в самом деле, откуда IDA может знать значение указателя стека в каждом конкретном случае) Тогда рекомендуется установить требуемое значение вручную, функцией SetLongPrm. Однако, обычно точное значение SP (ESP) не критично и в общем случае не влияет на правильность дизассемблирования кода. Пример использования: Message("%x \n", GetShortPrm(INF START SP) ffff 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 |