如何获取包含NULL字符的shellcode字符串的长度

时间:2018-06-27 07:17:31

标签: c++ string shellcode

我的shellcode字符串之间有NULL字符,并且我无法检测到它的长度,我尝试了std::string.length()方法,但它只计数到NULL字符,之后才不计数。

这是示例代码。

   std::string shell_str = "\x55\x48\x89\x00\x00\x00\x00\xC3\x90";
   std::cout << "shell : " << shell_str << std::endl;     
   std::cout << "shell length : " << shell_str.length() << std::endl;

输出 shell : UH� shell length : 3

但是字符串的长度为9 ,我也尝试将其复制到vector,但是仍然无法获得所需的输出。

完整代码段已发布here

1 个答案:

答案 0 :(得分:3)

问题不在于计算sed -E ' s/([^ ]*) ([^ ]*)(([^|]*\|){2})(.*)/\1,\2\3,\2\5/ s/(\.([^|]*\|){2})//g ' infile 的长度,而是问题在于用于初始化shell_str的文字字符串。 shell_str的构造函数将在“终止符”处停止。

您需要使用另一个std::string constructor来明确告诉它字符串的实际长度:

std::string

此外,由于“字符串”包含任意数据,因此您也无法将其打印为字符串。

如果您想要一个由任意字节组成的“字符串”,我建议您改用std::string shell_str("\x55\x48\x89\x00\x00\x00\x00\xC3\x90", 9);