Анимация
JavaScript
|
Главная Библионтека loc 0 10B: seg000:010B ; seg000:010B seg000:010B seg000:010B seg000:010E seg000:010E ; ----- seg000:010F aMyfile seg000:010F start mov ax, OFFFFh retn db MyFile,0 endp Message("0x%X \n", FindFuncEnd(0x10103) 0x10116 То, что последний отображаемый адрес равен 0x10F это небольшой баг IDA. На самом деле это адрес начала стоки, но не ее конца. Как нетрудно вычислить, адрес конца строки равен 0x115, следовательно функция FindFuncEnd работает правильно. В описании этой функции в idc.idc утверждается, что требуется передать линейный адрес начала функции, но это не так. С таким же успехом функция принимает любой, принадлежащий ей адрес, если он приходится на начало инструкции.
long GetFrame(long ea); Возвращает ID фрейма функции (если он есть) или BADADDR в противном случае. Это значение может интерпретироваться только IDA, и с токи зрения пользователя лишено всякого смысла (как и всякий дескриптор) Все локальные переменные и аргументы объединены в одну структуру, с которой можно работать, как и с любой с помощью функций, описанных в разделе «Структуры» Если функция не содержит ни одной локальной переменной и не имеет ни одного аргумента, то вызов GetFrame возвратит ошибку BADADDR.
.text:00401116 push .text:0040111B call .text:00401121 pop .text:00401122 pop .text:00401123 retn .text:00401123 amsg exit endp Message("%x \n", GetFrame(0x40110D) 0FFh off 0 408050 ecx ecx ff000162
long GetFrameLvarSize(long ea); Возвращает размер локальных переменных функции (в байтах). Если функция не имеет локальных переменных, то возвращается ноль. Если указанный адрес не принадлежит ни одной функции, возвращается ошибка BADADDR. Например: .text:00401806 ioinit proc near
BADADDR I Ошибка" long GetFrameRegsSize(long ea); Возвращает размер сохраненных в стековом фрейме регистров. Для 32-разрядных программ он равен четырем (четыре байта на регистр) и для 16-разрядных соответственно двум (два байта не регистр) Если функция не имеет кадра стека, то возвращается ноль и BADADDR если указанный адрес не принадлежит ни одной функции. Пример использования: .text:0040124A .text:0040124A .text:0040124A arg .text:0040124A arg .text:0040124A .text:0040124A .text:0040124B .text:0040124D .text:0040124E XcptFilter proc near = dword ptr 8 = dword ptr OCh push mov push push ebp, esp [ebp+arg 0] Message("0x%X \n", GetFrameRegsSize(0x40124A) seg000:2092 seg000:2092 seg000:2092 seg000:2092 seg000:2092 seg000:2093 sub 0 2092 var 40 proc far = byte ptr -40h push bp mov bp, sp Message("0x%X \n", GetFrameRegsSize(0x12093)
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 |