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

How to get length of shellcode string containing NULL characters

我有一串 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,我也尝试将它复制到矢量,但仍然没有得到所需的输出。

完整的代码片段已发布here

问题不在于计算 shell_str 的长度,问题在于用于初始化 shell_str 的文字字符串。 std::string 的构造函数将停止在 "terminator"。

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

std::string shell_str("\x55\x48\x89\x00\x00\x00\x00\xC3\x90", 9);

此外,由于 "string" 包含任意数据,您也不能将其打印为字符串。

如果您想要 "string" 任意字节,我建议您改用 std::vector<uint8_t>