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)
如何获取 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)