Как получить длину строки шеллкода, содержащей символы NULL - PullRequest
0 голосов
/ 27 июня 2018

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

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

1 Ответ

0 голосов
/ 27 июня 2018

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

...