不同语言的切入点

das*_*tan 1 c assembly programming-languages entry-point

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

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

  2. 什么是CPU知道在哪里找到程序入口点的惯例?

== - 编辑 - ==

问题2不是一个有意义的问题,因为CPU负责找到入口点是错误的.没有这样的惯例.见Eric Lippert澄清.

unw*_*ind 6

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

  • 使用NASM,您可以使用该.start指令放置入口点.
  • 使用MASM似乎更复杂,但end指令很重要.

引用的地址最后会出现在二进制(可执行)文件的标题中,这样操作系统就可以确定跳转的位置.

对于ELF二进制文件(在许多操作系统上使用),请参阅e_entry标题字段:

e_entry

该成员给出系统首先转移控制的虚拟地址,从而启动该过程.如果文件没有关联的入口点,则此成员保持为零.

这也发生在C语言中,除了当然编译器位于源和可执行文件之间,因此它会插入所需的引用main()(或者实际上,通常是以前运行的init例程)main().

Java不适用于原始二进制文件,它在JVM上的程序,所以它没有真正比较.