『注』Java的load函数为load_java,em86的load函数为load_em86,script 的load函数为load_script,他们没有提供library的load函数。
2.下面我们来看看关于这几个数据结构的主要操作:
register_binfmt:主要作用使将一中二进制文件加到formats链表中。
extern int register_binfmt(struct linux_binfmt *);
unregister_binfmt:执行与register_binfmt的反操作。
extern int unregister_binfmt(struct linux_binfmt *);
init:对于每个不同的二进制文件格式系统都提供了一组init操作,如下:
extern int init_elf_binfmt(void);
extern int init_aout_binfmt(void);
extern int init_script_binfmt(void);
extern int init_java_binfmt(void);
extern int init_em86_binfmt(void);
extern int init_misc_binfmt(void);
以上函数在中声明;
init函数的作用很简单,只是调用register_binfmt函数将自己的文件格式加入formats链表。
load函数:执行二进制文件调入工作,其实质工作一般都由一个相应do_load函数来完成。如:
do_load_elf_binary,do_load_elf_library,do_load_java……
extern int prepare_binprm(struct linux_binprm *);
extern int search_binary_handler
(struct linux_binprm*,struct pt_regs *);
这两个函数主要就涉及到另一个数据结构linux_binprm,她吗那就下次再说吧,到这里大家应该对Linux下几种二进制文件处理程序有个大体的印象了,具体细节去看看源代码吧。