Я изучаю атаку строки формата и пытаюсь понять, как строка перед строкой формата перезаписывает содержимое адреса.
Я читаю из замечательной статьи: http://www.cis.syr.edu/~wedu/Teaching/cis643/LectureNotes_New/Format_String.pdf
Я понимаю, что если пользователь имеет контроль над переменной, которая будет напечатана в printf, такой как
printf (Uservariable);
пользователь может не передавать переменные после форматирования строк и изменять содержимое адреса, используя такие строки, как
printf ("\ x10 \ x01 \ x48 \ x08% x% x% x% x% s");
Однако, как показано на диаграмме ниже, 0x10014808 вписывается в адрес, когда он должен быть в пробелах, показанных ниже.
Как% x объединяет все числа, чтобы сформировать адрес для перезаписи% s?