Когда вызывается std :: cout, какой внешний API используется? (Windows) - PullRequest
3 голосов
/ 11 апреля 2011

Это вопрос обратного инжиниринга .

В Windows 7 с двоичным файлом, скомпилированным с использованием Microsoft Visual C ++ 2008, когда вызывается std::cout.Внутренне какой API используется для записи данных ?WriteFile, fwrite, ConsoleOut?Я стремлюсь установить точку останова на std :: cout, где нет доступных исходных или отладочных символов.

1 Ответ

3 голосов
/ 11 апреля 2011

Я полагаю, что в конечном итоге будет использован WriteFile. Если вы скомпилируете простое hello world:

#include <iostream>
int main(int argc, char **argv)
{
  std::cout << "Hello" << std::endl;
  return (0);
}

... а затем выполните dumpbin /imports hello.exe, вы получите список внешних функций, которые он использует, вы обнаружите, что он импортирует как WriteFile, так и WriteConsoleW, но если память служит, последняя используется только для печати некоторых сообщений об ошибках стандартной библиотеки, а не для стандартного вывода.

...