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

Success SegBounds(long ea,long startea,long endea,long disable)

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

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

Адрес начала сегмента должен быть не меньше базового адреса сегмента, умноженного на шестнадцать, в противном случае первые байты сегмента будет иметь отрицательное смещение. Изменить базовый адрес можно вызовом SegCreate или SetSelector (если базовый адрес задан селектором).

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

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

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

аргумент

пояснения

ea

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

startea

32-разрядный линейный адрес нового начала сегмента

endea

величина на единицу большая последнего принадлежащего сегменту адреса

disable

уничтожать освободившиеся адреса

return

=return

пояснения

==1

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

==0

ошибка

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

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

Long SegStart(long ea)

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

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

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

SegCreate(0x10000,0x20000,0x1000,0,0,0);

a) создаем сегмент с адресом начала 0x10000 и адресом конца 0x20000

0. Creating a new segment (00010000-00020000) ... ... OK

b) сегмент успешно создан

Message(">%X\n",SegStart(0x10100));

c) вызываем функцию SegStart, передавая ей один из адресов, принадлежащих сегменту

>10000

d) результат – функция вернула адрес начала сегмента

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

аргумент

пояснения

ea

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

return

=return

пояснение

!=BADADDR

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

==BADADDR

ошибка

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

Интерактивный аналог: “~View\Segments”

адрес начала сегмента –––––––––––––––––––––––––––––––––––––––––––––––––––––––––--┐

╔═[■]═════════════════════════════════ Program Segmentation ═════════════════════│═════════3═[↑]═╗

║ 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 ▓

║ ▓

║ ▼

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

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