Подтвердить что ты не робот

C - Спецификатор формата% x

У меня есть маленький вопрос. Я знаю, что спецификатор формата% x можно использовать для чтения значений из стека в атаке строки формата.

Я нашел следующий код:

%08x%08x%08x%08x

Что означает 08? Что он делает точно? Спасибо:)

4b9b3361

Ответ 1

Break-вниз:

  • 8 говорит, что вы хотите показать 8 цифр
  • 0, который вы хотите префикс 0 вместо просто пробелов
  • x, который вы хотите распечатать в младшем шестнадцатеричном формате.

Быстрый пример (спасибо Гриджешу Чаухану):

#include <stdio.h>
int main() {
    int data = 29;
    printf("%x\n", data);    // just print data
    printf("%0x\n", data);   // just print data ('0' on its own has no effect)
    printf("%8x\n", data);   // print in 8 width and pad with blank spaces
    printf("%08x\n", data);  // print in 8 width and pad with 0's

    return 0;
}

Выход:

1d
1d
      1d
0000001d

Также см. http://www.cplusplus.com/reference/cstdio/printf/ для справки.

Ответ 2

Указывает, сколько цифр вы хотите отобразить.

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

Ответ 3

%08x означает, что каждое число должно быть напечатано не менее 8 символов с заполнением всех отсутствующих цифр нулями, например. для выхода "1" будет 00000001

Ответ 4

Из http://en.wikipedia.org/wiki/Printf_format_string

используйте вместо 0 вместо пробелов поле для заполнения поля, когда указан параметр ширины. Например, printf("%2d", 3) приводит к "3", а printf("%02d", 3) приводит к "03".