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

??? #Верстальщику - Change Table

аргумент

пояснение

линейный адрес, не обязательно принадлежащий какому-то элементу

minea

минимальный адрес, доступный функции

return

=return

пояснение

!=BADADDR

линейный адрес предыдущей головы элемента (не головы предыдущего элемента!)

==BADADDR

ошибка

Родственные функции: NextHead Интерактивный аналог: нет

long NextNotTail(long ea)

Функция возвращает линейный адрес головы следующего элемента или бестипового байта. Переданный функции линейный адрес ea не обязательно должен принадлежать какому-то элементу - он может даже вообще не существовать.

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

seg000:0000 aHelloIdaPro seg000:000E a1234

a) исходные данные

db Hello,IDA Pro! db 1234

Message(">%s\n",atoa(NextNotTail(0)));

b) вызываем функцию NextNotTail, передавая ей нулевой адрес.

>seg000:0000

c) результат - функция вернула адрес головы первого элемента ??? #Верстальщику - Change table

аргумент

пояснение

линейный адрес, не обязательно принадлежащий какому-то элементу

return

=return

пояснения

!=BADADDR

линейный адрес головы следующего элемента или бестипового байта

==BADADDR

ошибка

Родственные функции: PrevNotTail Интерактивный аналог: нет

long PrevNotTail(long ea)

Функция возвращает линейный адрес головы предыдущего элемента (не предыдущей головы элемента!). Переданный функции линейный адрес ea не обязательно должен принадлежать какому-то элементу - он может даже вообще не существовать.

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



seg000:0000 aHelloIdaPro seg000:000E a1234 a) исходные данные

db Hello,IDA Pro! db 1234

Message(">%s\n",atoa(NextNotTail(BADADDR)));

b) вызываем функцию PrevNotTail, передавая ей значение BADADDR

>seg000:000E

c) результат - функция вернула адрес головы самого последнего из существующих элемента

Замечание: в отличие от функции NextNotTail, функция PrevNotTail игнорирует бестиповые байты.

??? #Верстальщику - Change table

аргумент

пояснение

линейный адрес, не обязательно принадлежащий какому-то элементу

return

==return

пояснения

!=BADADDR

линейный адрес головы предыдущего элемента

==BADADDR

ошибка

Родственные функции: PrevNotTail Интерактивный аналог: нет

ТИПЫ ЭЛЕМЕНТОВ

#Definition

Поле флагов головы элемента определяет является ли данный элемент элементом кода или элементом данных (см. главу «Элементы»), а так же уточняет его тип. Например, один и та же цепочка из четырех байт может быть двойным словом, типом float, ASCII-строкой, массивом байт или двойных слов и т.д.

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

IDA Pro поддерживает следующие типы данных - байт, слово, двойное слово, четвертное слово, восьмерное слово, float, double, packed real, ASCII-строка, массив,

состоящих из любых вышеперечисленных типов, а так же тип align - байты, использующиеся для выравнивания кода (данных) по кратным адресам (см. таблицу 12)

??? #Верстальщику - change table

константа

FF BYTE

0x00000000

байт

FF WORD

0x10000000

слово

FF DWRD

0x20000000

двойное слово

FF QWRD

0x30000000

четвертное слово

FF TBYT

0x40000000

восьмерное слово



FF ASCI

0x50000000

ASCII-строка

FF STRU

0x60000000

структура

FF XTRN

0x70000000

внешние данные неизвестного размера

FF FLOAT

0x80000000

float

FF DOUBLE

0x90000000

double

FF PACKREAL

0xA0000000

упакованное десятичное целое

FF ALIGN

0xB0000000

директива выравнивания

Таблица 12 поддерживаемые типы данных

Цепочка бестиповых байт может быть преобразована в любой поддерживаемый IDA Pro тип данных, при условии что имеет достаточный для такой операции размер. Уже существующий элемент данных, также может быть преобразован в данные другого типа, если имеет достаточный для такой операции размер, либо за его хвостом следует цепочка бестиповых байт необходимой длины.

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

Примеры:

seg000:

0000

seg000:

0001

seg000:

0002

seg000:

0003

seg000:

0004

seg000:

0005

Var2

seg000:

0006

seg000:

0007

seg000:

0008

seg000:

0009

seg000:

000A

Бестиповая переменная "Var" может быть преобразована в байт, слово, двойное слово, float, ASCII-строку, но попытка преобразовать ее в четверное, восьмерное слово, double, packed real приведет к ошибке - поскольку тому препятствует элемент данных, расположенный по адресу "seg000:0005". Если же его уничтожить, преобразование пройдет успешно. Аналогично:

seg000:0000 Var dw 6548h

seg000:0002 db 6Ch

seg000:0003 db 6Ch

а) преобразование Var в двойное слово возможно

seg000:0000 Var seg000:0002

dw 6548h dw 6C6Ch

b) преобразование Var в двойное слово невозможно - требуется предварительно уничтожить следующий за ним элемент

Два и более последовательных элементов одного типа могут быть объединены в массив - как бы макроэлемент, собирающий их всех под одну крышу. С массивом IDA Pro работает как с единым целым, в частности, в начале каждой строки указывает не адрес текущего элемента, а адрес начала массива:

seg000:0000

seg000:0000

db 6Ch, 6Fh, 2Ch, 20h, 49h, 44h, 41h, 20h, 50h, 72h, 6Fh db 21h, 0

Функции трассировки элементов (см. главу «Элементы») будут возвращать только адреса начала массива и следующего за массивом элемента, но не адреса элементов самого массива! Аналогично, функции изменения представления операндов (см. главу



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