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

Long NextFunction(long ea);

Вызов возвращает линейный адрес начала функции следующий за ‘ea’. Что бы получить адрес первой функции необходимо вызвать NextFunction(0).

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

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

seg000:0000 sub_0_0 proc near

seg000:0000 push ax

seg000:0001 push bx

……………..

seg000:0027 pop bx

seg000:0028 pop ax

seg000:0029 retn

seg000:0029 sub_0_0 endp

seg000:0029

seg000:002A

seg000:002A ; ___________ S U B R O U T I N E ____________________

seg000:002A

seg000:002A

seg000:002A sub_0_2A proc near

seg000:002A mov si, 211h

seg000:002D call sub_0_DD

seg000:0030 mov si, 2BAh

seg000:0033 call sub_0_DD

seg000:0036 retn

seg000:0036 sub_0_2A endp

seg000:0036

seg000:0037

seg000:0037 ; _______________ S U B R O U T I N E ________________

seg000:0037

seg000:0037

seg000:0037 sub_0_37 proc near

seg000:0037

seg000:0037

seg000:0037 push ax

seg000:0038 push bx

auto a;

a=0;

while ((a=NextFunction(a))!=-1)

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

10000

1002a

10037

Операнд

Пояснения

ea

Линейный адрес

Return

Завершение

Пояснения

!=BADADDR

Линейный адрес начала следующей функции

BADADDR

Ошибка

Long PrevFunction(long ea)

Вызов возвращает линейный адрес предыдущий функции. Что бы получить адрес последней функции необходимо вызвать PrevFunction(BADADDR).

seg000:0000 sub_0_0 proc near

seg000:0000 push ax

seg000:0001 push bx

……………..

seg000:0027 pop bx

seg000:0028 pop ax

seg000:0029 retn

seg000:0029 sub_0_0 endp

seg000:0029

seg000:002A

seg000:002A ; ___________ S U B R O U T I N E ____________________

seg000:002A

seg000:002A

seg000:002A sub_0_2A proc near

seg000:002A mov si, 211h

seg000:002D call sub_0_DD

seg000:0030 mov si, 2BAh

seg000:0033 call sub_0_DD

seg000:0036 retn

seg000:0036 sub_0_2A endp

seg000:0036

seg000:0037

seg000:0037 ; _______________ S U B R O U T I N E ________________

seg000:0037

seg000:0037

seg000:0037 sub_0_37 proc near

seg000:0037

seg000:0037

seg000:0037 push ax

seg000:0038 push bx

auto a;

a=0x10038;

while ((a=PrevFunction(a))!=-1)

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

10037

1002a

10000

Операнд

Пояснения

Ea

Линейный адрес

Return

Завершение

Пояснения

!=BADADDR

Линейный адрес начала предыдущей функции

BADADDR

Ошибка

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