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

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 ═════════════════════== │====════3═[↑]═╗

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

║ seg000 00000000 00010000 at 100 pri N FFFF FFFF FFFF FFFF FFFF 0001100 0002000 ▓

║ ▓

║ ▼

╚1/1 ══════════════════◄■▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒►─┘

Success SegRename(long ea,char name)

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

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

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

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

Попытка присвоить сегменту пустое имя (аргумент name равен “”) приводит к ошибке.

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

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

платформа

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

PC

"$?@"5

“_0123456789"

"ABCDEFGHIJKLMNOPQRSTUVWXYZ"

"abcdefghijklmnopqrstuvwxyz";

Java

"$_@?!"6

"0123456789<>"

"ABCDEFGHIJKLMNOPQRSTUVWXYZ"

"abcdefghijklmnopqrstuvwxyz"

"АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ"7

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

TMS320C6

"$_0123456789"

"ABCDEFGHIJKLMNOPQRSTUVWXYZ"

"abcdefghijklmnopqrstuvwxyz"

PowerPC

"_0123456789."

"ABCDEFGHIJKLMNOPQRSTUVWXYZ"

"abcdefghijklmnopqrstuvwxyz”

Таблица 4

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

SegCreate(0x1000,0x2000,0x100,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

аргумент

пояснения

ea

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

name

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

return

=return

пояснения

==1

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

==0

ошибка

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

Интерактивный аналог: “~View\Segments”, <Ctrl-E>; <Alt-S>

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