Обратный инжиниринг — Нужна помощь в C ++ Disasm

Я делаю некоторые C ++ разборки с IDA Pro. Но я часто вижу подобные линии.

call    __ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc ;std::operator<<<std::char_traits<char>>(std::basic_ostream<char,std::char_traits<char>> &,char  const*)

О чем эти глифы? Почему функция C ++ выглядит такой сложной? И как я могу упростить мой ASM. Заранее спасибо.

0

Решение

C ++ гарантирует, что перегруженные функции могут быть определены компоновщиком по коверкание их имена. То, что вы видите, это информация о типе, закодированная в искаженном имени функции.

4

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

Это функция вывода для (например)

cout << "something";

std::operator<< это имя функции. Требуется std::basic_ostream<char, std::char_traits<char>>& аргумент — другими словами, std::ostream Второй аргумент char const *другими словами, классическая строка в стиле C, которая не должна меняться.

поскольку operator<< также возвращает std::ostream&это закодировано перед именем

Это «сложно», потому что его легче определить, шаблонное, basic_ostream так как существуют различные типы потоков, такие как owstream который принимает «широкие символы», полезно иметь шаблон basic_ostream который может быть создан для формирования std::ostreamчем реализовать несколько разных, по сути, одинаковых потоковых классов.

2

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