У меня есть строка шелл-кода с 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 и я попытался скопировать его в вектор также, но все еще не получает желаемый результат.
Полный фрагмент кода размещен Вот
Проблема не в расчете длины shell_str
проблема с литеральной строкой, которую вы используете для инициализации shell_str
, Конструктор std::string
остановится у «терминатора».
Вам нужно использовать другой std::string
конструктор, явным образом указать фактическую длину строки:
std::string shell_str("\x55\x48\x89\x00\x00\x00\x00\xC3\x90", 9);
Кроме того, поскольку «строка» содержит произвольные данные, вы также не можете распечатать ее как строку.
И если вы хотите «строку» произвольных байтов, я предлагаю вам использовать std::vector<uint8_t>
вместо.
Других решений пока нет …