格式化字符串

覆盖栈内存

通过%n 将指定个数写入相应地址。

覆盖任意内存

修改为小数字

通过前面我们可以发现,如果用%n的话,你输入的地址都会被计算在内。如果我想修改数值为2的话,哪怕是32位的地址都直接占用4个字节了,肯定无法写入2。
所以其实,我们没有必要老老实实让printf去指定我们(比如说)第6个地址写入%n个数值,我们可以用%8$n去指定printf去第八个位置寻找(因为我们的格式化字符串就占用8个字节了,可以用aa来凑字节。)

修改为大数字

使用%hhn精确控制希望修改的字节(这是通用方法,所有都可以这样子做)

附上我的美图,帮助各位理解为什么要padding这些字节:

posted @ 2024-08-24 18:53  muyiGin  阅读(3)  评论(0编辑  收藏  举报