D'après le contenu de la jump table à 11855a70, le handler de %n est à 1185606c:
1185606c: e51b1080 ldr r1, [fp, #-128]
11856070: e51b30b4 ldr r3, [fp, #-180]
11856074: e063000a rsb r0, r3, sl
11856078: e2813004 add r3, r1, #4 ; 0x4
1185607c: e50b3080 str r3, [fp, #-128]
11856080: e5912000 ldr r2, [r1]
11856084: e5820000 str r0, [r2]
11856088: eaffff90 b 0x11855ed0
Vers le début de la fonction, on trouve:
118558d0: e50b00b4 str r0, [fp, #-180]
118558d4: e3540000 cmp r4, #0 ; 0x0
118558d8: e3a00000 mov r0, #0 ; 0x0
118558dc: e50b1090 str r1, [fp, #-144]
118558e0: e50b2080 str r2, [fp, #-128]
c'est à dire que:
[ul][li]les 4 octets à -180(fp) sont le premier argument, "str", de sprintf (une seule écriture, plusieurs loads);[/li]
[li]les 4 octets à -144(fp) sont la format string (plusieurs loads et stores, avec au passage des incrémentations de la valeur, entre autre à travers des loads post-incrémentés);[/li]
[li]les 4 octets à -128(fp) sont la valeur courante du pointeur utilisé pour se déplacer dans les arguments de la partie varargs (plusieurs load+incrémentation+store).[/li][/ul]
Il n'y a que 7 sites d'appel (directs, du moins) pour sprintf: 11854f38 (2 fois), 11854ff8, 11855078 (mentionné en
./46), 11951b60, 11951bec (2 fois).
Aucune chaîne >= 2 caractères du boot2 ne comprend les octets '%n'.