gpt4 book ai didi

c++ - MSVCR 和 CRT 初始化

转载 作者:太空宇宙 更新时间:2023-11-04 15:21:12 27 4
gpt4 key购买 nike

出于好奇,加载使用 MSVCR 编译的应用程序时到底发生了什么? Windows 的加载器实际上是如何初始化 CRT 的?对于我目前收集到的信息,当程序以及所有导入的库都加载到内存中并完成所有重定位时,CRT 启动代码 (_CRT_INIT()?) 初始化所有全局初始化器.CRT$XC* 部分并调用用户定义的 main() 函数。我希望到目前为止这是正确的。

但为了便于解释,我们假设一个不使用 MSVCR 的程序(例如,使用 Cygwin GCC 或其他编译器构建的应用程序)尝试在运行时加载库,需要 CRT,使用自定义加载器/运行时链接器,因此不涉及 LoadLibrary()。加载器/链接器必须如何处理 CRT 初始化?它是否必须手动初始化所​​述部分中的所有“对象”,是否必须执行其他操作才能使库的内部连接正常工作,或者它是否必须调用 _CRT_INIT() (据我所知,它实际上是在运行时本身中定义的,并且不会导出到任何地方)。假设非 CRT 应用程序和 CRT 库不会在它们之间传递任何对象、异常和诸如此类的东西,这种混淆会以任何方式起作用吗?

我很想知道,因为我不太清楚 CRT 对实际加载过程有什么影响...

非常感谢任何信息,谢谢!

最佳答案

可执行镜像的入口点是使用/ENTRY 链接器选项选择的。它使用的默认值在 MSDN Library article 中有很好的记录。 .它们是 CRT 入口点。

如果您想替换 CRT,则选择相同的名称或在链接时明确使用/ENTRY 选项。您还需要/NODEFAULTLIB 以防止它链接常规 .lib

关于c++ - MSVCR 和 CRT 初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18834865/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com