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

Long AskLong (long defval,char prompt);

Функция запрашивает у пользователя ввод длинного целого числа. По умолчанию используется шестнадцатеричная система исчисления. Префикс ‘x’ можно ставить, а можно не ставить – все равно число будет трактоваться как шестнадцатеричное.

Отмена ввода или некорректный ввод приводит к возвращению ошибки BADADDR и, возможно, предупреждающему диалоговому окну, поясняющим источник ошибки.

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

AskLong(86562,”MyLong”);

Операнд

Пояснения

defval

Значение по умолчанию

promt

Заголовок окна

Return

Завершение

Пояснения

!=BADADRR

Введенное пользователем число

“”

Ошибка

Long AskSeg (long defval,char prompt);

Функция выводит диалог, запрашивающий ввод сегмента (селектора). Допустимо вводить имена сегментов с учетом регистра. Введенные селекторы автоматически не преобразуется адреса сегментов и эту операцию приходится выполнять вручную.

В любом случае функция возвращает значение типа word, а не long. О факте выхода за допустимые границы IDA не сообщает, просто отбрасывая старшее слово введенного значения.

Операнд

Пояснения

defval

Значение по умолчанию (long)

promt

Заголовок окна

Return

Завершение

Пояснения

!=BADADRR

Сегмент

“”

Ошибка

Обратите внимание, что ‘defval’ имеет тип long, а не char. Поэтому непосредственная передача имени сегмента по умолчанию невозможна. Однако IDA автоматически подставляет его, если сегмент с заданным адресом уже существует.

К сожалению, в IDA, включая версию 4.0, присутствует ошибка, в результате чего, вместо ожидаемого символьного имени сегмента выводится нечто нечитабельное и непечатаемое.

AskSeg(1,””);

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

В случае ошибки (или отмены) ввода возвращается ошибка BADSEL (не BADADDR!). Это происходит потому, что функция маскирует старшее слово, в результате чего (0xFFFFFFFF & 0xFFFF) == 0xFFFF, то есть BADSEL, а не BADADDR и не –1.

Char AskIdent (char defval,char prompt);

Эта функция предназначена для ввода идентификатора (имени). От AskStr ее отличает лишь дополнительная проверка корректности (максимальная длина имени, первый символ строки не цифра и так далее).

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

Если строка начинается с символа ‘@’, то функция всегда возвращает «»; двоеточие не считается недопустимым символом, даже если оно находится в середине строки.

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

Операнд

Пояснения

defval

Значение по умолчанию

promt

Заголовок окна

Return

Завершение

Пояснения

!=””

Строка

“”

Ошибка

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