C语言中\x开头的十六进制字符转义语法叫什么?是否和shellcode相关?
相关问题解答
1 语法正式名称
你看到的这类写法是C语言标准定义的十六进制转义字符序列,是字符/字符串字面量的合法构造方式:\x为固定前缀,后面紧跟两位十六进制数,直接表示对应ASCII/字节值。
2 示例代码说明
你提到的判断完全正确,这就是用十六进制编码值初始化的char类型数组:
- 代码
char next_ptr[8] = "\x30\xff\xff\x31\xff\xff\xff\xff";中恰好包含8个十六进制转义值,和数组声明的长度8完全匹配,此时编译器不会自动在数组末尾追加字符串结束符\0,这也是底层开发、二进制安全领域的常用写法。 - 各个字节对应的数值分别是:0x30、0xff、0xff、0x31、0xff、0xff、0xff、0xff,其中0x30对应ASCII字符
0、0x31对应ASCII字符1,0xff是十进制255的全1字节。
3 和shellcode的关联
这种写法确实是shellcode的标准书写形式:shellcode本质是预编译好的二进制机器码字节序列,用十六进制转义字符可以直接在C代码中定义完整的字节序列,不需要额外做进制转换操作。
你在XDA论坛看到的这段代码大概率和安卓设备的内存漏洞利用、bootloader修改、固件偏移量定义相关,其中的0xff通常用作内存地址填充值、无效位占位。
4 转文本乱码的原因
你尝试转文本得到乱码是正常现象,因为这些字节本身就不是为了表示可读文本设计的,只有按字节解析为内存地址、机器指令的时候才有实际业务意义。
内容的提问来源于stack exchange,提问作者ronalddd
相关产品推荐
相关产品推荐

