美文网首页
格式化字符串随笔

格式化字符串随笔

作者: anything都不会 | 来源:发表于2019-11-08 15:53 被阅读0次

addr%k$s

上这个格式为什么是这样呢?

是格式化字符为什么这样?

%k$s:s代表输出的是字符串,k代表是第几个参数;

https://www.anquanke.com/post/id/180009

具体的来说,是输出栈中存储地址所指向的字符串

%n:将%n之前printf已经打印的字符个数赋值给偏移处指针所指向的地址位置,如%100x10$n表示将0x64写入偏移10处保存的指针所指向的地址(4字节),而%$hn表示写入的地址空间为2字节,%$hhn表示写入的地址空间为1字节,%$lln表示写入的地址空间为8字节,在32bit和64bit环境下一样。有时,直接写4字节会导致程序崩溃或等候时间过长,可以通过%$hn或%$hhn来适时调整。

但是:这样获取的是相对于格式化字符串的第k个参数

首先,对于%k$s这一个,表示将相对于格式化字符串的第k个参数以%s形式输出。

正常情况下,一个printf函数格式为

像上面那样,格式化字符串是第一个参数,a是第二个参数,。。。。

什么叫相对于格式化字符串第k个参数呢?

当程序运行时,到printf函数时看一下堆栈图:

源程序是这样的:

而 printf("%08x.%08x.%08x.%s\n", a, b, c, s);堆栈图是这样的

可以看到,这样就是相对于格式化字符串的第k个参数。

原话是这样的

那么为什么要addr%k%s呢?

先插入一个小知识:

对于上面的例子,在进入 printf 函数的之前 (即还没有调用 printf),栈上的布局由高地址到低地址依次如下

我们可以看到,在没有call printf之前栈上的地址就是这样了。

相关文章

  • Python基础(18) - 字符串格式化与模板字符串方法

    字符串格式化的各种方法 格式化字符串的方法 使用%格式化 模板字符串 字符串的format方法 fstring 什...

  • 简单的宏定义(不定期补充)

    控制台输出 RGB色值 格式化字符串 格式化字符串 输出点、坐标、Rect 格式化数字

  • python基础知识(3)

    python字符串 python转义字符 python字符串运算符 python字符串格式化 python格式化操...

  • 字符串

    字符串的转义字符 字符串格式化 字符串格式化使用操作符百分号实现 字符串格式化符号 对字符串的下面这两个部分操作:...

  • python语法入门二

    元组 字符串 格式化 序列 元组tuple:不可变 字符串:不可变 格式化 序列

  • python 01常用数据类型

    字符串 字符串常用方法 字符串格式化

  • 时间处理工具类

    将秒数格式化为字符串 /*** 将秒数格式化为字符串** @param secs 秒 secFull 分or分钟*...

  • C语言学习笔记

    C/C++格式化字符串说明 C++的格式化字符串经常用作格式化数字的输出、字符串合并和转换等等很多场合。 1. 格...

  • lab9

    格式化字符串漏洞,不过是有点蛇皮的格式化字符串,学到了不少新姿势 很明显的格式化字符串,但同时也可以发现,我们的输...

  • 常用方法

    时间类 时间格式化 时间计算 字符串 字符串截取 数字格式化 axios拦截器

网友评论

      本文标题:格式化字符串随笔

      本文链接:https://www.haomeiwen.com/subject/tjllpctx.html