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

==BADADDR I ошибка

Родственные функции: FindImmediate

Интерактивный аналог:"~Nabigate\Search for\Next void"; <Ctrl-V>

long FindImmediate(long ea,long flag,long value)

Функция ищет ближайший к переданному ей линейному адресу ea операнд типа константа со значением равным value. В случае успешного поиска возвращается адрес головы элемента кода, которому этот операнд принадлежит.

В зависимости от флага направления поиск может идти как вперед (от младших адресов к старшим), так и назад (от старших адресов к младшим). Переданный функции линейный адрес в этот диапазон поиска не входит и не обязательно должен принадлежать какому-нибудь сегменту.

Аргумент flag задает направление поиска - если его младший бит установлен поиск идет от младших адресов к старшим и, соответственно, наоборот.

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

seg000:0100 mov ax, 9

seg000:0103 mov dx, 133h

a) исходные данные - требуется получить линейный адрес элемента, содержащего операнд типа константа, значение которой равно 9

Message(">%s\n",atoa(FindImmediate(0,1,9)));

b) вызов функции FindImmediate - адрес начала поиска равен нулю, единичное значение флага направление указывает вести поиск с увеличением адресов.

>seg000:0100

результат - линейный адрес элемента, содержащего операнд типа константа, значение которой равно 9

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

аргумент

пояснения

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

flag

=flag

пояснения

прямое направление поиска

обратное направление поиска

value

искомое значение константы

return

=return

пояснения

!=BADADDR

линейный адрес элемента, которому принадлежит найденный операнд

==BADADDR

ошибка

Родственные функции: FindVoid

Интерактивный аналог:"~Nabigate\Search for\Immediate"; <Alt-I>, "~Nabigate\Search for\Next Immediate"; <Ctrl-I>



ОБЪЕКТЫ #Definition

С каждым элементом (бестиповым байтом) могут быть связаны три объекта -метка, перекрестная ссылка и комментарий. IDA поддерживает два типа меток - метки, определенные пользователем и метки, автоматически сгенерированные IDA, а так же четыре типа комментариев - постоянный комментарий, отображаемый справа от элемента и отделяемый от него знаком «точка с запятой» (обычный ассемблерный комментарий), повторяемый комментарий, отображаемый справа от комментируемого элемента и возле всех ссылок на данный элемент, и два вида многострочных комментариев предваряющих и замыкающих комментируемый элемент. О перекрестных ссылках подробно рассказано в главе «Перекрестные ссылки».

Каждый элемент может иметь не более одной метки и до четырех комментариев различного типа одновременно. Метки и комментарии хранятся в отдельном виртуальном массиве, проиндексированным линейными адресами, а на наличие связанных с элементом (бестиповым байтом) объектом указывают флаги (см. таблицу 16)

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

Разрушение элемента не вызывает автоматического уничтожение связанных с ним объектов - каждый объект должен быть удален по отдельности соответствующими функциями.

константа

пояснения

FF COMM

0x00000800

комментарий

FF REF

0x00001000

перекрестная ссылка

FF LINE

0x00002000

много строчечный комментарий

FF NAME

0x00004000

метка, определенное пользователем

FF LABL

0x00008000

метка, автоматически сгенерированное IDA

FF FLOW

0x00010000

перекрестная ссылка с предыдущей инструкции

FF VAR

0x00080000

переменная

Таблица 16 Флаги, указывающие на наличие связанных объектов

Сводная таблица функций

функции, создающие и уничтожающие объекты

имя функции

краткое описание

success MakeName (long ea, char name)

создает метку

success JmpTable (long jmpea, long tableea, long nitems, long is32bit)

создает таблицу переходов

success MakeComm (long ea, char comment)

создает постоянный комментарий

success MakeRptCmt (long ea, char comment)

создает повторяемый комментарий



void ExtLinA (long ea,long n, char line)

создает строку комментария перед элементом

void ExtLinB (long ea,long n, char line);

создает строку комментария за элементом

void DelExtLnA (long ea, long n)

удаляет строку комментария перед элементом

void DelExtLnB (long ea, long n)

удаляет строку комментария за элементом

void MakeVar(long ea)

помечает элемент, флажком «переменная»

функции, возвращающие элементы

имя функции

краткое описание

char Name (long ea)

возвращает имя метки, при необходимости выполняя замену недопустимых символов

char GetTrueName (long ea)

возвращает имя метки

char Comment (long ea)

возвращает постоянный комментарий

char RptCmt (long ea)

возвращает повторяемый комментарий

char LineA (long ea,long num);

возвращает строку комментария, стоящего до элемента

char LineB (long ea,long num);

возвращает строку комментария, стоящего за элементом

/нкции, поиска объектов

имя функции

краткое описание

long LocByName (char name)

возвращает линейный адрес метки с заданным именем

success MakeName(long ea,char name)

Функция создает метку, расположенную по линейному адресу ea, с именем name. Переданный линейный адрес должен быть либо адресом головы элемента любого вида, либо адресом бестипового байта; в противном случае функция возвратит ошибку. Имя метки должно состоять только из допустимых символов, перечень которых для каждой платформы содержится в поле "NameChars" конфигурационного файла <ida.cfg>.

платформа

перечень символов, допустимых в именах меток

"$?@"9

" 0123456789"

"ABCDEFGHIJKLMNOPQRSTUVWXYZ" "abcdefghijklmnopqrstuvwxyz";

"$ @?!"0

"0123456789<>"

Java

"ABCDEFGHIJKLMNOPQRSTUVWXYZ" "abcdefghijklmnopqrstuvwxyz"

"АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ"" "абвгдежзийклмнопрстуфхцчшщъыьэюя";

"$ 0123456789"

TMS320C6

"ABCDEFGHIJKLMNOPQRSTUVWXYZ" "abcdefghijklmnopqrstuvwxyz"

" 0123456789."

PowerPC

"ABCDEFGHIJKLMNOPQRSTUVWXYZ" "abcdefghijklmnopqrstuvwxyz"

Служебные символы ассемблера

Символы, определенные только для специальных режимов Java-ассемблера Национальные (российские символы)



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