首页 > 代码库 > 进程环境详解(一)---main函数调用

进程环境详解(一)---main函数调用

  通常我们认为 main 函数是整个程序的入口,当然这也仅仅是我们的认为,实际上整个可执行文件的入口点并不是 main 函数,而是一个名为 _start 的标号。这一点在笔记 “ARM裸机->关于链接脚本中程序入口”中提到了。
 
  在ARM裸机中,我们编写的 c 程序中也会有 main 函数,但是我们是会在 start.S 这个文件中去调用 main 函数,从而进入到 c 语言环境中,而这个 start.S 我们称为启动代码。在start.S中我们会做各种初始化工作,为 c 语言程序的运行提供环境。
 
  类似的,在操作系统下运行程序实际上是由 exec 函数来运行我们的可执行文件(这是因为我们的进程都是由父进程(shell进程)创建而来,在子进程中使用exec函数来让子进程执行我们的程序),而可执行文件的真正入口应该是启动代码,这个启动代码会调用 main 函数,并且会从内核中获取命令行参数和环境变量,为 main 函数做好准备。当进程在 main 函数中返回到启动代码中时,启动代码会立即结束进程。
  从这里可以看出,main 函数的参数是启动代码传过去的,main 函数返回也是返回给启动代码。
 

进程环境详解(一)---main函数调用