C 获取十六进制 shellcode 的大小

C get size of hex shellcode

如何获取 char 指针的大小

char *data = "\x30\x2e\x30\x2e\x30\x2e\x30\x3a\x30";

始终使用 strlen(data)sizeof(data) returns 1

strlen对C字符串中的字符进行计数,直到遇到0。可能 使用 strlen 获取 shell 代码的长度很棘手,因为 shell 代码 中间可能包含 0 个字节;似乎甚至存在 null free shell 代码 (link) 的概念 - 在这种情况下,我相信您可以使用 strlen。否则你可以试试:

char data[] = "\x30\x2e\x30\x2e\x30\x2e\x30\x3a\x30"; // you were missing \ in the beginning
printf("%zu", sizeof(data));

给你 10 个字节。

strlen( data ) 给出 11。它是字符串文字 "x30\x2e\x30\x2e\x30\x2e\x30\x3a\x30" 中终止零之前的字符数。 sizeof( data ) returns 指针本身的大小并且是实现定义的。通常它是 4 或 8 个字节,并且这个值不依赖于指针指向的字符串文字的大小..

你可以问为什么strlen( data ) returns 11.是因为你忘了第一个字符前的第一个反斜杠"x30..."。因此,字符串文字从三个字符 'x'、'3' 和 '0' 开始。所有其他字符都指定为十六进制转义字符。

我想你是说

"\x30\x2e\x30\x2e\x30\x2e\x30\x3a\x30"

如果程序运行的系统使用ASCII编码那么这个字符串字面量相当于

0.0.0.0:0

定义如下:

char data[] = "x30\x2e\x30\x2e\x30\x2e\x30\x3a\x30";

然后使用sizeof(data)