1) %10$n
не записано , это спецификатор формата.И у него нет выходных данных, но есть только побочный эффект - записать количество выведенных символов до этого спецификатора в целое число, предоставленное 10-м аргументом для printf.Поскольку вы не предоставили 10 аргументов для printf, он выбирает что-то другое из стека и использует его в качестве адреса.Похоже, что в руководстве предполагается, что AAAA
находится там и интерпретируется как адрес 0x41414141.
2) %hn
означает не запись целого числа (обычно 4-байтового), а только короткое значение (обычно2 байта) по указанному адресу.Проще написать 2 2-байтовых значения с помощью этого метода вместо 1 4-байтового значения, поскольку для записи нужного значения вам пришлось печатать до 4M символов.