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

Long GetFrame(long ea);

Возвращает ID фрейма функции (если он есть) или BADADDR в противном случае. Это значение может интерпретироваться только IDA, и с токи зрения пользователя лишено всякого смысла (как и всякий дескриптор)

Все локальные переменные и аргументы объединены в одну структуру, с которой можно работать, как и с любой с помощью функций, описанных в разделе «Структуры»

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

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

.text:004010FF __amsg_exit proc near

.text:004010FF

.text:004010FF arg_0 = dword ptr 4

.text:004010FF

.text:004010FF cmp dword_0_408758, 2

.text:00401106 jz short loc_0_40110D

.text:00401108 call __FF_MSGBANNER

.text:0040110D

.text:0040110D loc_0_40110D:

.text:0040110D push [esp+arg_0]

.text:00401111 call __NMSG_WRITE

.text:00401116 push 0FFh

.text:0040111B call off_0_408050

.text:00401121 pop ecx

.text:00401122 pop ecx

.text:00401123 retn

.text:00401123 __amsg_exit endp

Message(“%x \n”,

GetFrame(0x40110D)

);

ff000162

Операнд

Пояснения

ea

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

Return

Завершение

Пояснения

!=BADADDR

ID структуры обеспечивающий доступ к локальным переменным и аргументам

BADADDR

Ошибка

Long GetFrameLvarSize(long ea);

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

Например:

.text:00401806 __ioinit proc near

.text:00401806 var_44 = byte ptr -44h

.text:00401806 var_12 = word ptr -12h

.text:00401806 var_10 = dword ptr -10h

.text:00401806

.text:00401806 sub esp, 44h

.text:00401809 push ebx

.text:0040180A push ebp

Message(“0x%X \n”,

GetFrameLvarSize(0x401809)

);

0x44

Операнд

Пояснения

Ea

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

Return

Завершение

Пояснения

!=0

!=BADADDR

Размер локальных переменных функции в байтах

0

Функция не имеет локальных переменных

BADADDR

Ошибка

Long GetFrameRegsSize(long ea);

Возвращает размер сохраненных в стековом фрейме регистров. Для 32-разрядных программ он равен четырем (четыре байта на регистр) и для 16-разрядных соответственно двум (два байта не регистр)

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

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

.text:0040124A __XcptFilter proc near

.text:0040124A

.text:0040124A arg_0 = dword ptr 8

.text:0040124A arg_4 = dword ptr 0Ch

.text:0040124A

.text:0040124A push ebp

.text:0040124B mov ebp, esp

.text:0040124D push ebx

.text:0040124E push [ebp+arg_0]

Message(“0x%X \n”,

GetFrameRegsSize(0x40124A)

);

4

seg000:2092 sub_0_2092 proc far

seg000:2092

seg000:2092 var_40 = byte ptr -40h

seg000:2092

seg000:2092 push bp

seg000:2093 mov bp, sp

Message(“0x%X \n”,

GetFrameRegsSize(0x12093)

);

2

Операнд

Пояснения

Ea

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

Return

Завершение

Пояснения

!=0

!=BADADDR

Размер сохраненных регистров в стековом фрейме

0

Функция не имеет кадра стека

BADADDR

Ошибка

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