📜  C / C++中的加载器

📅  最后修改于: 2021-05-25 22:27:56             🧑  作者: Mango

加载程序操作系统的程序,它将可执行文件从磁盘加载到主内存(RAM)中以供执行。它将内存空间分配给主内存中的可执行模块,然后将控制权转移到程序的开始指令。

例子:

akash @aix(/ u / akash) #cat./ ak1.cpp
#include
int main()
{
    printf("Testing of Loader !");
    return 0;
}

通过xlC编译器进行编译:

运行可执行文件时真正发生的情况:也可以使用strace命令。

显示的第一个调用是’ execve() ‘,它实际上是加载程序。该加载器创建的过程涉及:

  • 读取文件并为该进程创建地址空间。
  • 创建指令,数据和程序堆栈的页表条目,并初始化寄存器集。
  • 然后,执行通常会导致页面错误的程序第一条指令的跳转指令,并将指令的第一页存储到内存中。

以下两点与加载程序无关,仅用于提供更多信息:

  • 我们得到的另一件事是带有参数值的kwrite调用,该参数值已传递给程序中的printf函数。 kwrite是系统调用,实际上是通过传递给它的值从printf函数调用的,并且该函数负责将传递给它的值显示到控制台。
  • 我们在最后一条指令中也得到了_exit(0)调用,这是_exit系统调用,参数状态为0,表示以成功的信号返回操作系统。这个_exit是从return(0)语句调用的。
要从最佳影片策划和实践问题去学习,检查了C++基础课程为基础,以先进的C++和C++ STL课程基础加上STL。要完成从学习语言到DS Algo等的更多准备工作,请参阅“完整面试准备课程”