Анимация
JavaScript


Главная  Библионтека 

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 [ 55 ] 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140

seg000:0498 sub 0 48B seg000:0498 seg000:0499 ; seg000:0499 seg000:0499 seg000:0499

endp ; sp = -OAh

locret 0 499:

retn

Message("%b \n", GetFunctionFlags(0x1048B)

FUNC LIB

Таким флагом отмечены стандартные «библиотечные» функции. То есть те, чьи сигнатуры известны FLIRT.

text text text text text text text text text text text text text text text text text text text text

004010FF 004010FF 004010FF 004010FF 004010FF 004010FF 004010FF 004010FF 00401106 00401108

0040110D 0040110D 0040110D

00401111 00401116 0040111B 00401121 00401122 00401123 00401123

; Attributes: amsg exit

arg 0

library function proc near

= dword ptr 4

loc 0 40110D:

amsg exit

call

push

call

push

call

retn endp

dword 0 4 08758, 2

short loc 0 40110D

FF MSGBANNER

[esp+arg 0] NMSG WRITE

0FFh

off 0 408050

ecx ecx

Message("%b \n", GetFunctionFlags(0x4010FF)

FUNC FRAME

Функция использует в качестве указателя на кадр стека регистр BP (EBP). IDA определяет это отслеживая последовательность

PUSH BP MOV BP, SP



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

seg000 seg000 seg000 seg000 seg000 seg000 seg000 seg000 seg000 seg000 seg000 seg000 seg000 seg000 seg000 seg000 seg000 seg000 seg000

20 2

20 20 2

20 2

20B8 20B8 20B8 20B9 20BB 20BB 20BD 20BE 20C0 20C4 20C6 20C9

; Attributes:

sub 0 20B8

var 8 0 var 6B

var 62

bp-based frame proc near

= byte

= byte

= byte

push

push

Message("%b \n", GetFunctionFlags(0x4010FF)

10000

Обратите внимание, что IDA распознала эту комбинацию, даже когда команды push bp и mov bp,sp оказались достаточно разнесены.

FUNC USERFAR

Этот атрибут IDA устанавливает, когда пользователь вручную меняет тип функции с NEAR на FAR, вызывая диалог Modify Function с помощью команды меню ~ Edit \ Function \ Edit Function.





Обратите внимание, что это не относится к вызовам SetFunctionFlagsl Последняя устанавливает именно тот набор атрибутов, который ей передается.

FUNC HIDDEN

Этот атрибут устанавливается у «свернутых> функций. Свернуть любую функцию можно однократным нажатием Gray переместив курсов в ее границы. Кроме этого, в зависимости от настоек, IDA может автоматически сворачивать все библиотечные функции для экономии места.

dseg:027B ; [00000009 BYTES: COLLAPSED FUNCTION sub 0 27B. PRESS KEYPAD "+" TO EXPAND]

Message("%b \n", GetFunctionFlags(0x4010FF)

100000

Заметим, что в результате упущения этот тип не определен в IDC.IDC и что бы им пользоваться необходимо это сделать самостоятельно, внеся новую строчку:

#define FUNC HIDDEN

0x00000040L

a hidden function

Все атрибуты функция IDA отображает в виде комментариев, расположенных в начале функции.

dseg:0271 ; Attributes: library function

dseg:0271

dseg:0271 checknull proc near



0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 [ 55 ] 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140