当std::cout被调用时,使用了什么外部API ?(Windows)

When std::cout is called what external API is used? (Windows)

本文关键字:API 外部 什么 Windows cout std 调用      更新时间:2023-10-16

这是一个逆向工程问题。

在Windows 7上使用Microsoft Visual c++ 2008编译的二进制文件,当std::cout被调用时。在内部,使用什么API来写入数据?WriteFile, fwrite, ConsoleOut?我的目标是在没有源代码或调试符号可用的std::cout上设置一个断点。

我相信它最终会使用WriteFile。如果您编译一个简单的hello world:

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

…然后做dumpbin /imports hello.exe,你会得到它使用的外部函数的列表,你会发现它导入WriteFileWriteConsoleW,但如果内存可用,后者仅用于打印一些标准库错误消息,而不是用于标准输出。