Анимация
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

INF FILETYPE

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

Так же следует учитывать, что в версии 3.84 функция возвращает неверные значения. Дело в том, что IDC.IDC не был изменен, тогда как были расширены типы файлов, начиная с середины таблицы, от чего все типы «посыпались».

MS-DOS exe файл стал определятся как программный файл PalmPilot, что хотя и не нарушало работоспособности IDA, но не позволяло определить тип текущего файла.

В IDC.IDC содержится ссылка на файл core.hpp. На самом деле это опечатка и нужно смотреть ida.hpp, входящий в IDA SDK. Там мы обнаружим прелюбопытную структуру, описывающую типы поддерживаемых файлов.

Сравнив ее с IDC.IDC можно обнаружить различие, которое показано ниже:

f EXE old,

FT EXE OLD

f COM old,

FT COM OLD

f BIN,

FT BIN

f DRV,

FT DRV

f WIN,

FT WIN

f HEX,

FT HEX

f MEX,

FT MEX

f LX,

FT LX

f LE,

FT LE

f NLM,

FT NLM

f COFF,

FT COFF

f PE,

FT PE

f OMF,

FT USER

f SREC,

FT OMF

f ZIP,

FT SREC

f OMFLIB,

FT ZIP

f AR,

FT OMFLIB

f LOADER,

FT AR

f ELF,

FT LOADER

f W32RUN,

FT ELF

f AOUT,

FT W32RUN

f PRC,

FT AOUT

FT PRC

FT EXE

FT COM

FT AIXAR

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

Расшифровка всех значений приведена ниже:

FT EXE OLD

MS DOS EXE файл

FT COM OLD

MS DOS COM файл

FT BIN

Двоичный файл (дамп ROM например)



FT DRV

MS DOS драйвер (drv или sys)

FT WIN

New Executable (NE)

FT HEX

Intel Hex Object File

FT MEX

MOS Technology Hex Object File

FT LX

Linear Executable (LX)

FT LE

Linear Executable (LE)

FT NLM

Netware Loadable Module (NLM)

FT COFF

Common Object File Format (COFF)

FT PE

Portable Executable (PE)

FT USER

Файл, загруженный посредством загрузчика IDP

FT OMF

Object Module Format

FT SREC

R-records

FT ZIP

ZIP file (никогда не бывает загружен в базу

IDA)

FT OMFLIB

Библиотека OMF Модулей

FT AR

ar library

FT LOADER

Файл загружен посредством LOADER DLL

FT ELF

Executable and Linkable Format (ELF)

FT W32RUN

Watcom DOS32 Extender (W32RUN)

FT AOUT

Linux a.out (AOUT)

FT PRC

PalmPilot программный файл

FT EXE

MS DOS EXE File

FT COM

MS DOS COM File

FT AIXAR

AIX ar library

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

Message("%d \n", GetShortPrm(INF FILETYPE)

INF OSTYPE

Короткое целое хранящее тип операционной системы для загруженного файла (не среды запуска дизассемблера!)

Должна принимать следующие значения:

OSTYPE MSDOS

0x0001

MS-DOS

OSTYPE WIN

0x0002

MS Windows

OSTYPE OS2

0x0004

OS/2

OSTYPE NETW

0x0008

Novell NetWare

Да, именно должна, ибо 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 бит). В этом случае функция всегда возвращает нулевое значение.

APPT CONSOLE

0x0001

Console

APPT GRAPHIC

0x0002

Graphics

APPT PROGRAM

0x0004

APPT LIBRARY

0x0008

APPT DRIVER

0x0010

DRIVER

APPT 1THREAD

0x0020

Singlethread

APPT MTHREAD

0x0040

Multithread

APPT 16BIT

0x0080

16 bit application

APPT 32BIT

0x0100

32 bit application

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

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