c++ - c++ 可执行文件中存储了多少源信息

标签 c++ c exe

前几天无意中用Notepad++打开了一个商业应用程序的C++可执行文件,发现可执行文件中存储了相当多的原始源代码信息。

在可执行文件中,我可以找到文件名(app.c、dlgstat.c、...)、函数名(GetTickCountDispatchMessageA、...)和一小段源代码,主要是条件( szChar != TEXT('\0') , iRow < XTGetRows( hwndList ) )。之后我检查了另一个 QT 可执行文件并且:再次是源文件名和方法签名。

因此,我想知道有多少源代码信息真正存储在 C/C++ 可执行文件中(例如,使用 QT 或 MinGW 编译)。这可能是某种仍包含原始源代码的调试版本吗?这些信息是否用于一些反射(reflection)?出版商有什么理由不删除这些东西吗?

最佳答案

How much source code information is really stored in a C/C++ executable?

在实践中,并不多。运行时不需要源代码。您命名的字符串来自两件事:

  • 函数名称(例如 GetTickCount)是从其他模块导入的函数名称。这些名称在运行时是必需的,因为函数是动态解析的(通过使用函数名称调用 GetProcAddress)。

  • 条件可能是断言:assert 宏将其参数字符串化,以便在触发时您知道不满足什么条件。

如果您构建一个 DLL,它还将包含它导出的所有函数的名称,因此它们可以在运行时解析(其他共享对象格式可能也是如此)。

调试符号也可能包含一些原始源代码,但这取决于调试符号使用的格式。这些符号可能包含在二进制文件本身或辅助文件中(例如,Windows 上使用的 .pdb 文件)。

关于c++ - c++ 可执行文件中存储了多少源信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12611179/

相关文章:

delphi - 函数 EXE 到 DLL (Delphi)

windows - Windows Cmd 中的 Cygwin Bash 未运行可执行文件

python - 使用 Pyinstaller 和 -noconsole 会弹出弹出窗口

c++ - 设备无法启动。 (代码 10)umdf 驱动程序开发错误

c++ - 复数运算

c++ - 如果我声明一个指针,类的指针成员会发生什么情况?

c - 如何从标准输入获取整数?快速地。可以用准确性换取性能

c++ - 如何在一个数组中保存更多指针

c - 在C中初始化一个数组

c - 整数到字节数组 Little Endian,反之亦然