c - 不同语言的切入点

标签 c assembly programming-languages entry-point

我知道在C/C++和Java中,程序的入口点是函数main(),
现在我有以下两个问题,

  1. 用 MASM、NASM 和其他语言编写的程序的入口点是什么?

  2. CPU 知道在哪里可以找到程序的入口点的约定是什么?

==-编辑-==

问题 2 不是一个有意义的问题,因为 CPU 负责寻找入口点是错误的。没有这样的约定。请参阅 Eric Lippert 的说明。

最佳答案

在汇编中(MASM 和 NASM 都只是汇编程序,即将汇编源代码转换为机器代码的程序)没有默认入口点。您通常使用汇编指令指定它。

  • 对于 NASM,您使用 .start放置入口点的指令。
  • 使用 MASM 似乎更复杂,但是 end指令很重要。

然后,引用的地址会出现在二进制(可执行)文件的 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/

上一篇:c - 递归解释

下一篇:切断预处理线

相关文章:

c++ - 如何更改 C++ 对象的类(实现可变类型)

assembly - 字节码到底是什么?

c - 节点内引用?

c - 计算某个IP范围和时间范围内的访问次数的有效方法

c++ - "CMakeLists.txt"似乎丢失了

assembly - ARM:2 个 printfs 导致段错误

programming-languages - vftable - 这是什么?

C 数组 malloc() VS {}

c - 在 linux 上使用 od 命令有倒退吗?

assembly - MIPS BNE指令