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

void PatchByte (long ea, long value)

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

По замыслу разработчика предназначалась для падченья программы (например, замене 7x на EB, т.е. инструкций условного перехода на безусловный переход - операция часто сопутствующая снятию защит), чем и объясняется ее название. Однако, она нашла применение в решении широкого круга различных задач, в частности копировании фрагментов виртуальной памяти.

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

Пример ее использования можно найти в файле "memcpy.idc", поставляемом вместе с IDA.

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

аргумент

пояснение

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

value

Записываемое значение (байт)

Родственные функции: PatchWord, PatchDword Интекративный аналог: «~EDIT\Patch program\Change byte»

void PatchWord (long ea,long value)

Функция модифицирует содержимое слова виртуальной памяти, расположенного по адресу ea на значение value. В остальном аналогичена PatchByte (см. описание

PathByte).

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

аргумент

пояснения

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

ea value

Родственные функции: PatchByte, PatchDword Интерактивный аналог: «~EDIT\ Patch program\Change word»

void PatchDword (long ea,long value)

Функция модифицирует содержимое двойного слова виртуальной памяти, расположенного по адресу ea на значение value. В остальном аналогична PatchByte (см. описание PatchByte)

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

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



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

value I Записывамое значение (слово)

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

long NextAddr (long ea)

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

NextAddr (0x0).

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

0:00010000

48h ;

0:00010001

65h ;

0:00010002

6Ch ;

0:00010003

6Ch ;

0:00010004

6Fh ;

0:00010005

2Ch ;

0:00010006

20h ;

0:00010007

49h ;

0:00010008

44h ;

0:00010009

41h ;

0:0001000A

20h ;

0:0001000B

50h ;

0:0001000C

72h ;

0:0001000D

6Fh ;

0:0001000E

21h ;

0:0001000F

20h ;

0:00010010

0Dh ;

0:00010011

0Ah ;

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

auto a;

a=0;

while(1) {

a=NextAddr(a);

if (a==BADADDR) break;

Message(">%x\n",a);

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

>10000 >10001 >10002 >10003 >10004 >10005 >10006 >10007 >10008 >10009 >1000a



>1000b >1000c >1000d >1000e >1000f >10010 >10011

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

аргумент

пояснения

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

return

=return

пояснения

!=BADADDR

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

==BADADDR

ошибка

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

long PrevAddr (long ea)

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

0:00010000

48h ;

0:00010001

65h ;

0:00010002

6Ch ;

0:00010003

6Ch ;

0:00010004

6Fh ;

0:00010005

2Ch ;

0:00010006

20h ;

0:00010007

49h ;

0:00010008

44h ;

0:00010009

41h ;

0:0001000A

20h ;

0:0001000B

50h ;

0:0001000C

72h ;

0:0001000D

6Fh ;

0:0001000E

21h ;

0:0001000F

20h ;

0:00010010

0Dh ;

0:00010011

0Ah ;

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

auto a;

a=BADADDR;

while(1)

a=PrevAddr(a); if (aBADADD) break; Message(">%X\n",a);



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