我知道在C/C++和Java中,程序的入口点是函数main()
,
现在我有以下两个问题,
用 MASM、NASM 和其他语言编写的程序的入口点是什么?
CPU 知道在哪里可以找到程序的入口点的约定是什么?
==-编辑-==
问题 2 不是一个有意义的问题,因为 CPU 负责寻找入口点是错误的。没有这样的约定。请参阅 Eric Lippert
的说明。
最佳答案
在汇编中(MASM 和 NASM 都只是汇编程序,即将汇编源代码转换为机器代码的程序)没有默认入口点。您通常使用汇编指令指定它。
然后,引用的地址会出现在二进制(可执行)文件的 header 中,以便操作系统可以找出跳转到的位置。
对于 ELF二进制文件(用于许多操作系统)参见 e_entry
标题字段:
e_entry
This member gives the virtual address to which the system first transfers control, thus starting the process. If the file has no associated entry point, this member holds zero.
C 也会发生这种情况,当然除了编译器位于您的源代码和可执行文件之间,因此它会插入所需的对 main()
的引用(或者,实际上,通常是对一个 init在 main()
之前运行的例程。
Java 不使用原始二进制文件,它是在 JVM 上运行的程序,所以它并没有真正进行比较。
关于c - 不同语言的切入点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23650784/