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



void DelEnum(long enum id);

Функция удаляет перечисление, заданное идентификатором вместе со всеми его членами.

Пример:

FFFFFFFF ; enum enum 1 FFFFFFFF enum 1 0 = 1 FFFFFFFF enum 1 2 = 2

FFFFFFFF

FFFFFFFF ; ----------------------------

FFFFFFFF

FFFFFFFF ; enum enum 2 FFFFFFFF MyEnum = 16h

FFFFFFFF DelEnum(

GetEnum("enum 2")

FFFFFFFF ; enum enum 1 FFFFFFFF enum 10 = 1



FFFFFFFF enum 1 2

FFFFFFFF

Операнд Пояснения

Enum id Идентификатор перечисления

Интерактивно перечисление можно удалить, установив курсор на любой его элемент и нажав клавишу <DEL>

success SetEnumIdx(long enum id,long idx);

Функция позволяет изменять индекс перечисления в списке. При этом перечисления меняются местами, и затирания не происходит. Например:

FFFFFFFF ; enum enum 1

FFFFFFFF enum 1 0 FFFFFFFF enum 1 2

FFFFFFFF FFFFFFFF ; FFFFFFFF

FFFFFFFF ; enum MyNewEnum FFFFFFFF MyNewEnum 0 FFFFFFFF FFFFFFFF ; FFFFFFFF

FFFFFFFF ; enum enum 9 FFFFFFFF enum 9 0

= 1 = 2

SetEnumIdx( GetEnum("enum

FFFFFFFF ; enum MyNewEnum FFFFFFFF MyNewEnum 0 FFFFFFFF FFFFFFFF ; FFFFFFFF

FFFFFFFF ; enum enum 1 FFFFFFFF enum 1 0 FFFFFFFF enum 1 2 FFFFFFFF FFFFFFFF ; FFFFFFFF

FFFFFFFF ; enum enum 9 FFFFFFFF enum 9 0 FFFFFFFF

= 1 = 2

Операнд

Пояснения

Идентификатор (ID) перечисления

Return

==return Пояснения



Успешное завершение

Ошибка

FIXUP

ALMA MATER

Более привычным синонимом fixup вероятно, окажется термин «перемещаемые элементы».

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

Поскольку IDA эмулирует загрузку файла в собственное адресное пространство и даже трассирует его выполнение, то она должна поддерживать и перемещаемые элементы.

Покажем это на небольшом примере, MS-DOS exe файла.

Просмотр с помощью HIEW

00000200

B80100

ax,00001

00000203

8ED8

ds,ax

00000205

B409

ah,009 ;

00000207

BA0000

dx,00000

0000020A

CD21

seg000:0000 seg000:0000 seg000:0003 seg000:0005 seg000:0005 seg000:0007 seg000:000A

Просмотр с помощью IDA

start proc near

mov ax, 1001h

mov ds, ax

assume ds:dseg mov ah, 9

mov dx, 0

int 21h

Что грузиться в регистр AX? С виду непосредственное значение. Однако, это не так. Если приглядеться, то можно увидеть, что дальше оно помещается в регистр DS и, следовательно, скорее всего указывает на сегмент данных программы.

То есть 0x1 это адрес сегмента данных выраженный в параграфах. Знакомым с архитектурой IBM PC может показаться, с чего бы это вдруг он казался расположенным глубоко в таблице векторов прерываний. Но ничего странного нет. И сегмент данных расположен вовсе не там, где можно было бы подумать.

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

По умолчанию IDA загружает exe файлы по адресу 0x10000. Следовательно, считая в параграфах, 0x1000+0x1 == 0x1001, как видим, результат совпадает с тем, что отобразила IDA.

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

00000000: 4D 5A 2C 00-02 00 02 00-20 00 00 00-FF FF 00 00 MZ, □ □



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