gpt4 book ai didi

c - c程序中链接的隐藏例程

转载 作者:太空宇宙 更新时间:2023-11-04 06:38:28 26 4
gpt4 key购买 nike

你好,当一个人反汇编一些由c编译器编译的win32 exe程序时表明一些编译器在其中链接了一些“隐藏”例程 -我认为即使 c 程序是一个空程序并且有 5 个字节左右。

我知道这 5 个字节是用 PE .exe 格式封装的,但是为什么要放一些例程-对我来说似乎没有必要,甚至有点让我烦恼。那是什么?可以省略吗?我认为c 程序(现在不谈论 c++,我知道它有一些初始例程)不应该需要这样的互补隐藏功能..

很多 tnx 的答案,甚至可能是一些扩展的信息链接,导致这个我对这个话题很感兴趣

//编辑

好的,这是我以前做过的一些反汇编(数字火星和旧的 bo​​rland 命令行(我也测试过)两者都编写了更多代码,(我对 bcc32 特别感兴趣)但它们在此类反汇编中不包含可读名称/符号所以我不会在这里张贴它们

这些有点可读性——但我在理解方面没有经验这是什么 ;-)

https://dl.dropbox.com/u/42887985/prog_devcpp.htm

https://dl.dropbox.com/u/42887985/prog_lcc.htm

https://dl.dropbox.com/u/42887985/prog_mingw.htm

https://dl.dropbox.com/u/42887985/prog_pelles.htm

一些解释性评论这里是什么?(恐怕这里可能有一些 c++ sh*t,我是对纯 c 插件感兴趣而不是 c++,但现在太累了,无法确保它是用 c 语言编译的模式,已编译的空主程序的扩展名是 c所以我认为它会以 c 而不是 c++ 输出)

tnx 以获得更详细的解释

最佳答案

由于您的 win32 exe 文件是一个动态链接的目标文件,它将包含动态链接器完成其工作所需的必要数据,例如要链接到的库的名称和需要解析的符号。

即使是一个空的 main() 程序也会链接到 c-runtime 和 kernel32.dll 库(可能还有其他的?- 距离我上次做 Win32 dev 已经有一段时间了)。

您还应该知道 main() 只是您的 程序的入口点——在此之前已经进行了相当多的工作,例如检索和标记命令行,设置语言环境,创建 stderrstdinstdout 并设置 c 运行时所需的其他机制at_exit() 这样的库。类似地,当您的 main() 返回时,运行时会进行一些清理 - 并且至少需要调用内核来告诉它您已完成。

至于有没有必要?是的,除非您喜欢每次都编写自己的程序序言和结语。如果您足够自虐,可能有一些方法可以编写最小的、静态链接的应用程序。

至于存储开销,您为何如此烦恼?担心还不够。

关于c - c程序中链接的隐藏例程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11994075/

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