Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ida.final.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
6 Mб
Скачать

Void PatchByte (long ea, long value)

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

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

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

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

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

аргумент

пояснение

ea

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

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

аргумент

пояснения

ea

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

value

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

Родственные функции: PatchByte, PatchWord

Интерактивный аналог: нет

Long NextAddr (long ea)

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

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

0:00010000 db 48h ; H

0:00010001 db 65h ; e

0:00010002 db 6Ch ; l

0:00010003 db 6Ch ; l

0:00010004 db 6Fh ; o

0:00010005 db 2Ch ; ,

0:00010006 db 20h ;

0:00010007 db 49h ; I

0:00010008 db 44h ; D

0:00010009 db 41h ; A

0:0001000A db 20h ;

0:0001000B db 50h ; P

0:0001000C db 72h ; r

0:0001000D db 6Fh ; o

0:0001000E db 21h ; !

0:0001000F db 20h ;

0:00010010 db 0Dh ;

0:00010011 db 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

аргумент

пояснения

ea

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

return

=return

пояснения

!=BADADDR

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

==BADADDR

ошибка

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

Интерактивный аналог: нет

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]