Как получить длину строки шеллкода, содержащей символы NULL

У меня есть строка шелл-кода с 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 и я попытался скопировать его в вектор также, но все еще не получает желаемый результат.

Полный фрагмент кода размещен Вот

2

Решение

Проблема не в расчете длины 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> вместо.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]