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

b) трассировка адресов последовательными вызовами функции PrevAddr

>10011 >10010 >1000F >1000E >1000D >1000C >1000B >1000A >10009 >10008 >10007 >10006 >10005 >10004 >10003 >10002 >10001 >10000

c) результат - получение перечня существующих адресов виртуальной памяти ??? #верстальщику - change table

аргумент

пояснение

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

return

=return

пояснения

!=BADADDR

предшествующий ea адрес виртуальной памяти

==BADADDR

ошибка

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

long GetFlags(long ea)

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

О назначении каждого бита флагов рассказано при описании связанных с ним функций.

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

аргумент

пояснения

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

return

=return

Пояснения

значение флагов

ошибка

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



void SetFlags(long ea)

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

Внимание: настоятельно рекомендуется по возможности избегать непосредственной модификации флагов - допущенная ошибка может привести к зависанию дизассемблера!

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

аргумент пояснения

ea I линейный адрес ячейки виртуальной памяти

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

long FindBinary(long ea,long flag,char str)

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

В зависимости от флага направления поиск может идти как вперед (от младших адресов к старшим), так и назад (от старших адресов к младшим), регистр символов может как различаться, так и нет.

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

Аргумент str задает подстроку поиска, выраженную в шестнадцатеричных кодах символов (точнее - в системе исчисления, установленной системой исчисления по умолчанию), разделенных между собой пробелами. Суффикс "h", равно как и префикс "x" при этом указывать не нужно.

Аргумент flag задает направление поиска и определяет чувствительность к регистру символов: если его младший бит установлен поиск идет от младших адресов к старшим и, соответственно, наоборот; если первый справа бит (считая от нуля) установлен - прописные и строчечные буквы различаются и, соответственно, наоборот.

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

seg000:

0000

48h ;

seg000:

0001

65h ;

seg000:

0002

6Ch ;

seg000:

0003

6Ch ;

seg000:

0004

6Fh ;

seg000:

0005

2Ch ;

seg000:

0006

20h ;

seg000:

0007

49h ;

seg000:

0008

44h ;

seg000:

0009

41h ;

seg000:

000A

20h ;

seg000:

000B

50h ;

seg000:

000C

72h ;

seg000:

000D

6Fh ;

seg000:

000E

21h ;

seg000:

000F

0 ;



Message(">%s\n",atoa(FindBinaryi

41")));

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

SegByName("seg000"),1,"49 44

аргумент

пояснения

линейный адрес начала поиска

flag

=flag

пояснения

поиск от старших адресов к младшим

поиск от младших адресов к старшим

не различать регистр символов

различать регистр символов

return

=return

Пояснения

!=BADADDR

линейный адрес найденной подстроки

==BADADDR

ошибка

Родственные функции: нет Интерактивный аналог: "~Search\Text", <Alt-T>

СЕГМЕНТЫ И СЕЛЕКТОРЫ

#Definition

Сегментом называется непрерывная область памяти, адресуемая относительно базового адреса сегмента.

Каждый сегмент характеризуется базовым адресом сегмента, адресом начала сегмента и адресом конца сегмента.

Базовый адрес сегмента обычно выражается в параграфах, адреса начала и конца - в байтах.

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

Никакой линейный адрес не может принадлежать более чем одному сегменту одновременно - т.е. сегменты не могут пересекаться.

В дальнейшем, если не оговорено обратное, адрес начала сегмента обозначается "startea", адрес конца сегмента - "endea", а базовый адрес - "BASE".

Смещение первого байта в сегменте обозначается "startoffset" и связано с адресом начала и базовым адресом следующим соотношением:


Формула 1 Смещение первого байта в сегменте

Смещения в сегменте измеряются целыми неотрицательными числами, следовательно, приравняв startoffset к нулю, получаем: startea > (BASE* 0x10).

Сегментный адрес [BASE:offset] связан с линейным адресом следующим соотношением:



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