Анимация
JavaScript
|
Главная Библионтека ??? #Верстальщику - Change Table
Родственные функции: 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
Родственные функции: 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
Родственные функции: PrevNotTail Интерактивный аналог: нет ТИПЫ ЭЛЕМЕНТОВ #Definition Поле флагов головы элемента определяет является ли данный элемент элементом кода или элементом данных (см. главу «Элементы»), а так же уточняет его тип. Например, один и та же цепочка из четырех байт может быть двойным словом, типом float, ASCII-строкой, массивом байт или двойных слов и т.д. Замечание: типотизация данных - одно из немаловажных достоинств IDA Pro, ощутимо повышающее качество дизассемблирования. В полностью дизассемблированной программе не должно быть ни одного байта данных неопределенного типа. IDA Pro поддерживает следующие типы данных - байт, слово, двойное слово, четвертное слово, восьмерное слово, float, double, packed real, ASCII-строка, массив, состоящих из любых вышеперечисленных типов, а так же тип align - байты, использующиеся для выравнивания кода (данных) по кратным адресам (см. таблицу 12) ??? #Верстальщику - change table
Таблица 12 поддерживаемые типы данных Цепочка бестиповых байт может быть преобразована в любой поддерживаемый IDA Pro тип данных, при условии что имеет достаточный для такой операции размер. Уже существующий элемент данных, также может быть преобразован в данные другого типа, если имеет достаточный для такой операции размер, либо за его хвостом следует цепочка бестиповых байт необходимой длины. Если в результате преобразования, размер элемента уменьшается, его остаток преобразуется в один или несколько бестиповых байт. Примеры:
Бестиповая переменная "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 |