我的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
答案 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);
。