格式化字符串
覆盖栈内存
通过%n
将指定个数写入相应地址。
覆盖任意内存
修改为小数字
通过前面我们可以发现,如果用%n
的话,你输入的地址都会被计算在内。如果我想修改数值为2的话,哪怕是32位的地址都直接占用4个字节了,肯定无法写入2。
所以其实,我们没有必要老老实实让printf去指定我们(比如说)第6个地址写入%n
个数值,我们可以用%8$n
去指定printf去第八个位置寻找(因为我们的格式化字符串就占用8个字节了,可以用aa来凑字节。)
修改为大数字
使用%hhn
精确控制希望修改的字节(这是通用方法,所有都可以这样子做)
附上我的美图,帮助各位理解为什么要padding这些字节:
本文来自博客园,作者:muyiGin,转载请注明原文链接:https://www.cnblogs.com/muyiGin/p/18378088
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步