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

Success SetFunctionFlags(long ea,long flags);

Позволяет устанавливать атрибуты функции. Подробнее об этом было сказано в описании функции GetFunctionFlags.

Операнд

Пояснения

Ea

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

flag

Атрибуты функции (смотри таблицу в описании GetFunctionFlags)

Return

Завершение

Пояснения

!=BADADDR

Набор атрибутов функции (смотри таблицу выше)

BADADDR

Ошибка

Как уже отмечалось в описании функции SetFunctionFlags, часто IDA автоматически не распознает функции, не возвращающие управления (нет команды ref в завершении функции).

Если это критично, то нужный атрибут можно установить вручную. Покажем это на следующем примере:

dseg:0272 ; Attributes: library function bp-based frame

dseg:0272

dseg:0272 __terminate proc near ; COD

dseg:0272

dseg:0272 arg_0 = byte ptr 2

dseg:0272

dseg:0272 mov bp, sp

dseg:0274 mov ah, 4Ch ; 'L'

dseg:0276 mov al, [bp+arg_0]

dseg:0279 int 21h ; DOS

dseg:0279 __terminate endp ; AL

SetFunctionFilegs

(

0x10272,

GetFunctionFlags(0x10272) + 1

)

dseg:0272 ; Attributes: library function noreturn bp-based frame

dseg:0272

dseg:0272 __terminate proc near ; CODE XREF: sub_0_3C7+44p

dseg:0272

dseg:0272 arg_0 = byte ptr 2

dseg:0272

dseg:0272 mov bp, sp

dseg:0274 mov ah, 4Ch ; 'L'

dseg:0276 mov al, [bp+arg_0]

dseg:0279 int 21h ; DOS - 2+ - QUIT WITH EXIT

dseg:0279 __terminate endp ; AL = exit code

В большинстве случаев атрибуты никакого влияния на функции не оказывают. Так, например, если в приведенном примере сбросить флаг FUNC_FRAME, то это не повлечет за собой автоматического удаления всех локальных переменных, адресуемых через BP.

SetFunctionFilegs

(

0x10272,

GetFunctionFlags(0x10272) – 0x10;

)

dseg:0272 ; Attributes: library function

dseg:0272

dseg:0272 __terminate proc near ; CODE XREF: sub_0_3C7+44p

dseg:0272

dseg:0272 arg_0 = byte ptr 2

dseg:0272

dseg:0272 mov bp, sp

dseg:0274 mov ah, 4Ch ; 'L'

dseg:0276 mov al, [bp+arg_0]

dseg:0279 int 21h ; DOS - 2+ - QUIT WITH EXIT

dseg:0279 __terminate endp ; AL = exit code

Но вот установка флага FUNC_HIDDEN приведет к незамедлительному сворачиванию функции и сброс соответственно, наоборот.

SetFunctionFilegs

(

0x10272,

GetFunctionFlags(0x10272) + 0x40;

)

dseg:0272 ; [00000009 BYTES: COLLAPSED FUNCTION __terminate. PRESS KEYPAD "+" TO EXPAND]

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