ELF 文件格式在内核中的注册

在文件linux/fs/binfmt_elf.c中开始了ELF可执行文件的内核之旅注册

blob.png


注册二进制文件格式的函数register_binfmt是将一个struct linux_binfmt结构体添加到linux系统总的文件格式链表中,实现如,链表头为formats

blob.png

注册的文件格式结构体如下:

blob.png

第一个成员就是该结构体的链表头。

core_dump函数在程序收到“dump”信号时调用,产生core dump文件。

load_binaryload_shlib是文件格式主要的钩子函数:加载

可以想象当一个程序执行时,系统先会扫描该程序的文件格式,然后根据文件格式去遍历该结构体的链表,匹配到对应的注册结构体,最后就是调用其注册的load_binaryload_shlib函数了。

对于ELF文件格式其对该结构体填充如下:

blob.png

 

我们知道当用户层执行execve函数会调用内核层的系统调用函数sys_execve。将文件路径拷贝到内核后执行函数do_execve。其主要使用了执行一个新的程序。

do_execve函数中执行以下初始工作后调用search_binnary_handler函数,从系统文件格式链表format中扫描并调用load binary函数。

 

参考:

l  浅谈ELF文件执行过程