C - %x格式说明符

Mat*_*hew 60 c security string format

我有一个小问题.我知道%x格式说明符可用于在格式字符串攻击中从堆栈中读取值.

我找到了以下代码:

%08x%08x%08x%08x
Run Code Online (Sandbox Code Playgroud)

08是什么意思?它到底在做什么?谢谢 :)

son*_*ave 115

分解:

  • 8 说你要显示8位数
  • 0你想用0's而不是空格前缀
  • x 您想要以小写十六进制打印.

简单的例子(感谢Grijesh Chauhan):

#include <stdio.h>
int main() {
    int data = 29;
    printf("%x\n", data);    // just print data
    printf("%0x\n", data);   // just print data ('0' on its own has no effect)
    printf("%8x\n", data);   // print in 8 width and pad with blank spaces
    printf("%08x\n", data);  // print in 8 width and pad with 0's

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出:

1d
1d
      1d
0000001d
Run Code Online (Sandbox Code Playgroud)

另请参阅http://www.cplusplus.com/reference/cstdio/printf/以供参考.

  • 添加了一个希望你喜欢的例子.如果不是,您可以恢复到您的版本 (8认同)
  • @Matthew 你还应该尝试使用“%-8x”和大写“X”。并观察效果 (2认同)

Vla*_*mir 6

%08x 意味着每个数字都应该打印至少 8 个字符宽,并用零填充所有丢失的数字,例如对于 '1' 输出将是 00000001