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

Success MakeLocal(long start,long end,char location,char name)

версия 3.74 и старше

С версии 3.74 IDA поддерживает локальные переменные, которые в большинстве же случаев распознает и создает автоматически. Но иногда она не способна правильно их распознать, и тогда эта миссия ложиться на плечи пользователя. Подробнее о локальных переменных можно прочитать в специальной главе «Локальные переменные» посвященной непосредственно им.

'MakeLocal' полный аналог («~Edit\Functions\Stack variables»). В прототипе функции 'MakeLocal' указывается область видимости локальной переменной ('start' и 'end'), однако существующие версии IDA (вплоть до IDA 4.0) не поддерживает такой возможности и область видимости локальной переменной распространяется целиком на всю функцию.

Функция принимает следующие операнды:

операнд

Пояснения

end

Этот операнд игнорируется. Обычно его оставляют равным нулю, но из соображений совместимости с последующими версиями рекомендуются задавать конец функции или константу 'BADADDR' - тогда область локальной переменной будет определена IDA автоматически.

start

Этот операнд в существующих версиях должен совпадать с началом функции, иначе MakeLocal возвратит ошибку (в последующих версиях start должен определять адрес начала видимости локальной переменной)

location

Смешение переменной в кадре стека, задаваемое в виде строкового выражения "[BP+XX]", где "xx" представлено в шестнадцатеричном исчислении.

Спецификатор 'x' можно ставить, а можно не ставить - все равно значение будет трактоваться как шестнадцатеричное.

Интересной недокументированной особенностью является возможность задавать другие регистры, помимо BP, например 'AX', однако это не возымеет никакого значения, все равно будет трактоваться как 'BP'

name

Это есть суть имя создаваемой переменной со всеми ограничениями, наложенными на имена и метки. Признаком хорошего тона является выбор такой нотации, что бы локальные переменные легко визуально отличались от остальных. IDA всем автоматически всем создаваемым локальным переменным присваивает имя 'var_xx'.

Return

==return

пояснения

==1

Локальная переменная успешно создана

==0

Ошибка

Hot Key

Menu

<Ctrl-K>

Edit\Functions\Stack variables

Кроме локальных переменных этой же функцией можно создавать и размещенные в стеке аргументы, т.к. фактически это те же локальные переменные, только размещенные по другую сторону кадра стека (с положительным смещением, а не отрицательным).

IDA в большинстве случаев самостоятельно автоматически определяет аргументы функций (называя их 'arg_xx') и вмешательство пользователя обычно не требуется.

Пример:

MakeLocal(ScreenEA(),0,"[bp+0x4]","MyVar");

.text:00401124 sub_0_401124 proc near

.text:00401124

.text:00401124 MyVar = dword ptr 4

.text:00401124

.text:00401124 push [esp+MyVar]

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