下面我们来看看关于这几个数据结构的主要操作:
l register_binfmt:主要作用使将一中二进制文件加到formats链表中
Linux用sys_execve装入可执行二进制文件
www.orchn.com
extern int register_binfmt(struct linux_binfmt *);
l unregister_binfmt:执行与register_binfmt的反操作
extern int unregister_binfmt(struct linux_binfmt *);
l 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链表
www.orchn.com
l load函数:执行二进制文件调入工作,其实质工作一般都由一个相应do_load函数来完成如:do_load_elf_binary,do_load_elf_library,do_load_java……..
l extern int prepare_binprm(struct linux_binprm *);
extern int search_binary_handler(struct linux_binprm*,struct pt_regs *);
这两个函数主要就涉及到另一个数据结构linux_binprm,她吗那就下次再说吧,到这里大家应该对linux下几种二进制文件处理程序有个大体的印象了,具体细节去看看源代码吧