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

Inf_start_ip

Это длинное поле содержит в себе значение регистра IP (EIP) при запуске программы. Для бинарных файлов не имеет смысла и возвращает ошибку (BADADDR). В остальных случаях IDA извлекает необходимую информацию из соответствующих полей заголовка файла или же эмулятора загрузчика (например, для com-файлов).

Это поле доступно как на чтение, так и на запись. Однако, модификация начального значения IP (EIP) не приведет к изменению точки входа (Entry point) файла (для этого необходимо изменить значение INF_BEGIN_EA)

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

Message("%x \n",

GetLongPrm(INF_START_IP)

);

401020

Inf_begin_ea

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

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

Message("%x \n",

GetLongPrm(INF_BEGIN_EA)

);

401020

INF_MIN_EA

Это длинное поле хранит минимальный линейный адрес, используемый программой.

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

Message("%x \n",

GetLongPrm(INF_MIN_EA)

);

401000

INF_MAX_EA

Это длинное поле хранит самый старший адрес, используемый программой. Никогда не бывает равно минус единице (не смотря на то, что это число присутствует в IDC.IDC). Не зависимо от того, загружен файл как бинарный или нет, всегда возвращается максимальный адрес, встретившийся в программе.

Message("%x \n",

GetLongPrm(INF_MAX_EA)

);

134EA

INF_LOW_OFF

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

Рассмотрим это на следующем примере: пусть у в исследуемом файле минимальный из возможных адресов равен 0x100. Следовательно, можно предположить, что все операнды, входящие в диапазон от 0 до 0хFF окажутся константами, а свыше 0xFF с равной степенью вероятности могут быть как смешениями, так и константами.

IDA всегда использует беззнаковые значения операндов. Поэтому [BP-2] будет трактоваться как 0xFFFE, а не –2.

Допустима модификация этого поля, в том числе и интерактивно, через меню «~Options\Text representation\void's low limit». По умолчанию IDA использует минимальный линейный адрес. Как правило, первым располагается сегмент кода. Если достоверно известно, что программа не содержит на него ссылок, то значение INF_LOW_OFF можно изменить таким образом, что бы оно указывало на сегмент данных.

Message("%x \n",

GetLongPrm(INF_LOW_OFF)

);

401000

Inf_high_off

Это длинное поле хранит самый старший из возможных адресов, до которого непосредственные операнды могут трактоваться как тип void. Подробнее об этом было сказано в описании поля INF_LOW_OFF

По умолчанию INF_HIGH_OFF равно наибольшему адресу, занимаемому программой. Часто этого оказывается недостаточным для тех программ, что организуют буфера за пределами области статических переменных.

Рассмотрим это на примере типичного EXE файла (SMALL модель памяти - Сегмент стека и заголовок для упрощения не показаны) Все переменные, кроме тех, что инициализируются на стадии компиляции, останутся «не видимы» для IDA. Она посчитает ссылки на них константами, а не смещениями.

Поэтому необходимо изменить значение поля INF_HIGH_OFF вручную.

Файл на диске

Исполняемая программа

КОД

Сегмент кода

СТАТИЧЕСКИЕ ПЕРЕМЕННЫЕ

Сегмент данных

Статические переменные

Сегмент данных

Динамические перемнные

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