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

Success SegDelete(long ea,long disable)

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

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

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

Внимание: операция удаления сегментов необратима – повторное создание уничтоженного сегмента не восстановит удаленные вместе с сегментом метки, функции, переменные, комментарии и другие результаты дизассемблирования.

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

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

seg000:0000 seg000 segment byte public '' use16

seg000:0000 assume cs:seg000

seg000:0000 assume es:nothing, ss:nothing, ds:nothing, fs:nothing, gs:nothing

seg000:0000 aHelloIdaPro db 'Hello, IDA Pro! ',0Dh,0Ah ; Test

seg000:0000 seg000 ends

а) исходный сегмент, содержащий строку “aHelloIdaPro” и комментарий “Test”

SegDelete(SegByBase(SegByName("seg000")>>4),0);

b) удаление сегмента без уничтожения виртуальной памяти

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 ;

с) результат – сегмент удален, содержимое виртуальной памяти - нет

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

d) Попытка создания нового сегмента для восстановления удаленного

seg000:0000

seg000:0000 ; Segment type: Regular

seg000:0000 seg000 segment at 1000h private '' use16

seg000:0000 assume cs:seg000

seg000:0000 assume es:nothing, ss:nothing, ds:nothing, fs:nothing, gs:nothing

seg000:0000 db 48h ; H

seg000:0001 db 65h ; e

seg000:0002 db 6Ch ; l

seg000:0003 db 6Ch ; l

seg000:0004 db 6Fh ; o

seg000:0005 db 2Ch ; ,

seg000:0006 db 20h ;

seg000:0007 db 49h ; I

seg000:0008 db 44h ; D

seg000:0009 db 41h ; A

seg000:000A db 20h ;

seg000:000B db 50h ; P

seg000:000C db 72h ; r

seg000:000D db 6Fh ; o

seg000:000E db 21h ; !

seg000:000F db 20h ;

seg000:0010 db 0Dh ;

seg000:0011 db 0Ah;

seg000:0011 seg000 ends

e) результат – сегмент восстановлен, а строка и комментарий – нет.

SegDetele(0x10000,1);

f) удаление сегмента вместе с принадлежащей ему виртуальной памятью

╔═[■]═══════════════════════════════════════ IDA view-A ══════

пустой экран дизассемблера

j) результат – виртуальная память удалена

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

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

seg000:0000 ; Segment type: Regular

seg000:0000 seg000 segment at 1000h private '' use16

seg000:0000 assume cs:seg000

seg000:0000 assume es:nothing, ss:nothing, ds:nothing, fs:nothing, gs:nothing

seg000:0000 db ? ; unexplored

seg000:0001 db ? ; unexplored

seg000:0002 db ? ; unexplored

seg000:0003 db ? ; unexplored

seg000:0004 db ? ; unexplored

seg000:0005 db ? ; unexplored

seg000:0006 db ? ; unexplored

seg000:0007 db ? ; unexplored

seg000:0008 db ? ; unexplored

seg000:0009 db ? ; unexplored

seg000:000A db ? ; unexplored

seg000:000B db ? ; unexplored

seg000:000C db ? ; unexplored

seg000:000D db ? ; unexplored

seg000:000E db ? ; unexplored

seg000:000F db ? ; unexplored

seg000:0010 db ? ; unexplored

seg000:0011 db ? ; unexplored

seg000:0011 seg000 ends

l) результат – адресное пространство восстановлено, но содержимое виртуальной памяти – нет.

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

аргумент

пояснения

ea

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

disable

=disable

пояснения

==0

не уничтожать адреса, принадлежащие сегменту

==1

уничтожать адреса, принадлежащие сегменту

return

=return

==1

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

==0

ошибка

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

Интерактивный аналог: “~Edit\Segments\Delete segment”; “~View\Segments”, <Del>

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