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

>1000

c) результат - базовый адрес сегмента MySeg

SegCreate(0x2000,0x3000,0x200,0,0,0); SegRename(0x2000,"MySeg");

d) создаем второй сегмент с именем "MySeg", но на этом раз базовым адресом, равным 0x2000

Program Segmentation

=4=[t] т

Name Start End Align Base Type Cls 32es ss ds fs gs MySeg 00000000 00001000 at 0100 pri N FFFF FFFF FFFF FFFF FFFF 00001000 00002000 i MySeg 00000000 00001000 at 0200 pri N FFFF FFFF FFFF FFFF FFFF 00002000 00003000

e) это получилось! Теперь существуют два одноименных сегмента

Message(">%X\n",SegByName("MySeg"));

f) вызываем функцию SegByName передавая ей имя "MySeg"

>1000

g) результат - базовый адрес первого сегмента ??? #верстальщику - change table

аргумент

пояснения

segname

имя сегмента (регистр учитывается)

return

=return

пояснения

!=BADADDR

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

==BADADDR

ошибка

Родственные функции: SegRename, SegName Интерактивный аналог: "~View\Segments"

базовый кюа сегмеа I- сегмеа

Program Segmentation

Name Start End Align Base Type Cls 32es ss ds fs gs ▲

seg000 00000000 00010000 at 1000 pri N FFFF FFFF FFFF FFFF FFFF 00010000 00020000

=3=[т] т

long SegByBase(long base)

Функция по базовому адресу (селектору) сегмента определяет линейный адрес его начала. Если передать базовый адрес, не принадлежащий ни одному сегменту, или существующий, но не использующийся ни одним сегментом селектор, функция возвратит значение BADADDR, сигнализируя об ошибке.

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

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

SegCreate(0x1100,0x2000,0x100,0,0,0);

a) создаем сегмент с базовым адресом 0x100 и линейным адресом начала 0x1100

Message(">%X\n",SegByBase(0x100));



b) вызываем функцию SegByBase для получения линейного адреса начала сегмента по его базе

>1100

c) результат - линейный адрес начала сегмента ??? #верстальщику - change table

аргумент

пояснения

base

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

return

=return

пояснения

!=BADADDR

линейный адрес начала сегмента

==BADADDR

ошибка

Родственные функции: SegByName Интерактивный аналог: "~View\Segments"

базовьй моа сегмеа Д=["]

ейньй аес начала сегмеа Program Segmentation

Name seg000

Start

End Align Base Type Cls 32es ss ds fs gs ▼

010000 at 100 pri N FFFF FFFF FEFF FEFF FEF 0001100 0002000

3=[t] T

success SegRename(long ea,char name)

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

Аргумент ea представляет собой любой линейный адрес, принадлежащий сегменту. Если передать адрес не принадлежащий никакому сегменту, функция возвратит ошибку.

Аргумент name задает новое имя сегмента с учетом регистра. Если имя начинается с цифры, функция автоматически дополнит его знаком прочерка. Если в имени содержится недопустимые символы, они будут автоматически заменены знаком прочерка.

Допустимые символы перечисляются в полях NameChars конфигурационного файла <ida.cfg>, значение которых по умолчанию приведено в таблице ???

Попытка присвоить сегменту пустое имя (аргумент name равен "") приводит к

ошибке.

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

??? #Верстальщику Create New Table

платформа

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

" 0123456789"

"ABCDEFGHIJKLMNOPQRSTUVWXYZ" "abcdefghijklmnopqrstuvwxyz";

Java

"$ @?!"6

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

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



"0123456789<>"

"ABCDEFGHIJKLMNOPQRSTUVWXYZ" "abcdefghijklmnopqrstuvwxyz"

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

TMS320C6

"$ 0123456789"

"ABCDEFGHIJKLMNOPQRSTUVWXYZ" "abcdefghijklmnopqrstuvwxyz"

PowerPC

" 0123456789."

"ABCDEFGHIJKLMNOPQRSTUVWXYZ" "abcdefghijklmnopqrstuvwxyz"

Таблица 4

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

SegCreate(0x10 0 0,0x2 0 0 0,0x10 0,0,0,0); Message(">%s\n",SegName(0x1000));

a) создаем сегмент и тут же определяем его имя

>seg000

b) имя сегмента - "seg000"

SegRename(0x1000,"666"); Message(">%s\n",SegName(0x1000));

c) вызываем функцию SegRename для переименования сегмента в "666" и тут же получаем имя сегмента при помощи SegName

> 666

d) результат - новое имя сегмента " 666", - функция автоматически добавила спереди знак прочерка, поскольку имя начиналась с цифры

SegRename(0x1000,"Русский квас"); Message(">%s\n",SegName(0x1000));

e) вызываем функции SegRename для переименования сегмента в «Русский квас» и тут же получаем имя сегмента при помощи SegName

f) результат - все запрещенные символы были заменены знаками прочерка ??? #верстальщику - change table

аргумент

пояснения

линейный адрес, принадлежащий сегменту

name

новое имя сегмента

return

=return

пояснения

успешное завершение операции

ошибка

Родственные функции: SegName, SegByName Интерактивный аналог: "~View\Segments", <Ctrl-E>; <Alt-S>

Национальные (российские символы)



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