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

Char form (char format,...);

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

Например:

auto a,s0;

a=0x123;

s0=form("%x \n",a);

Message(s0);

123

'form' не единственное средство для преобразования типов, к тому же достаточно медленно работающие. В большинстве случаев рекомендуется использовать другие функции, преобразующие длинные целые в строку. 'form' выгодно применять только для чисел с плавающей запятой (‘float’).

Управляющие символы стандартные, и частично совместимые с 'printf' и полностью совместимы со спецификаторами функции Message встроенного языка IDA.

Сф

пояснение

%d

десятичное длинное знаковое целое

Пример:

Message(“%d”,0xF);

15

%x

шестнадцатеричное длинное целое строчечными символами

Пример:

Message(“%x”,10);

a

%X

шестнадцатеричное длинное целое заглавными символами

Пример:

Message(“%X”,10);

A

%o

восьмеричное длинное знаковое целое

Пример:

Message(“%o”,11);

13

%u

десятичное длинное беззнаковое целое

Пример:

Message(“%u”,-1);

4294967295

%f

десятичное с плавающей точной

Пример:

Message(“%f”, 1000000);

1.e6

%c

символьное значение

Пример:

Message(“%c”,33);

!

%s

строковое значение

Пример:

Message(“%s”,”Hello, Word! \n”);

Hello, Word!

%e

вывод чисел в экспоненциальной форме

Пример:

Пример:

Message(“%e”, 1000000);

1.e6

%g

вывод чисел в экспоненциальной форме

ЗАМЕЧАНИЕ: В оригинале спецификатор '%g' заставляет функцию саму решать, в какой форме выводить число - с десятичной точкой или в экспоненциальной форме, из соображений здравомыслия и удобочитаемости. IDA всегда при задании этого спецификатора представляет числа в экспоненциальной форме.

вывод указателя (не поддерживается)

ЗАМЕЧАНИЕ: вместо спецификатора '%p' IDA использует '%a', преобразующее линейный адрес в строковой сегментный, и автоматически подставляет имя сегмента.

Так, например, 'Message("%a \n",0x10002)' выдаст 'seg000:2'. Обратите внимание, что таким способом нельзя узнать адрес переменной.

Пример:

auto a;

a="Hello!\n";

Message("%a \n",a);

0

Возвращается ноль, а не указатель на переменную.

%p

вывод десятичного целого всегда со знаком, не опуская плюс.

%+d

в оригинале - вывод шестнадцатеричного целого всегда со знаком, но ida воспринимает эту конструкцию точно так же как и ‘x'.

%+x

'n' длина выводимого десятичного числа, при необходимости дополняемая слева пробелами.

Например:

Message("Число-%3d \n”,1);

Число- 1

Если выводимое число не укладывается в 'n' позиций, то оно выводится целиком.

Например:

Message("Число-%3d \n”,10000);

Число-10000

%nd

'n' длина выводимого шестнадцатеричного числа, при необходимости дополняемая слева пробелами.

Например:

Message("Число-%3x \n”,1);

Число- 1

Если выводимое число не укладывается в 'n' позиций, то оно выводится целиком.

Напрмер:

Message("Число-%3x \n”,0x1234);

Число-1234

%nd

‘n’ длина выводимого десятичного числа, при необходимости дополняемая слева незначащими нулями.

Пример:

Message("Число-%03d",1);

Число-001

Если выводимое число не укладывается в ‘n’ позиций, то оно выводится целиком.

Пример

Message("Число-%03d",1000)

Число-1000

%0nx

‘n’ длина выводимого шестнадцатеричного числа, при необходимости дополняемая слева незначащими нулями.

Пример:

Message("Число-%03x",0x1);

Число-001

Если выводимое число не укладывается в ‘n’ позиций, то оно выводится целиком.

Пример:

Message("Число-%03x",0x1234);

Число-1234

%#x

Вывод префикса ‘0x’ перед шестрадцатиричными числами

Пример:

Message(“%#x”,123);

0x123

%#o

Вывод префикса ‘0’ перед восьмиричными числами

Пример:

Message(“%#o”,1);

01

%n

Количество выведенных символов (не поддерживается)

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