如何获取包含 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>
。
我有一串 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>
。