2

最近关注编译源码的进度,看书的时候遇到两个专业的词:输入点地址和可执行起始地址,我只知道输入点地址是0x0,不知道它们的区别.

4

1 回答 1

4

术语很模糊,但我想我知道你在说什么。一种语言需要运行时支持。C 和 C++ 语言的标准是 CRT。CRT 需要在程序开始运行之前进行初始化。打开标准输出和标准输入,初始化静态对象,设置信号,诸如此类。

完成的两种基本方法,编译器可以在程序的 main() 入口点中注入对初始化代码的调用。在 main() 中的其余代码之前。这对于没有花哨加载程序的简单操作系统来说是典型的。入口点和可执行文件的起始地址都是相同的。这也是语言标准禁止递归 main() 的原因。

或者可以通过将可执行的起始地址设置为运行时初始化函数来完成。然后,在初始化之后,它又调用程序的入口点。在 Linux 和 Windows 等更高级的操作系统上很常见。

于 2013-06-04T02:41:46.253 回答