linux可执行文件的加载和运行之一(4)

linux可执行文件的加载和运行之一

  经过一系统的初始化之后,可以寻找该文件的加载module了.这是由search_binary_handler()完成的.在深入到这段代码之前.我们有必要讨论一下linux可执文件模块的组织.

  在linux内核,用linux_binfmt结构来表示每一个加载模块.它的定义如下:

struct linux_binfmt {
    //用来构成链表
     struct list_head lh;
     //所属的module
     struct module *module;
     //加载可执行文件
     int (*load_binary)(struct linux_binprm *, struct pt_regs * regs);
     //加载共享库
     int (*load_shlib)(struct file *);
     int (*core_dump)(long signr, struct pt_regs *regs, struct file *file, unsigned long limit);
     unsigned long min_coredump;    /* minimal dump size */
     int hasvdso;
}
结构中的lh将之组成一个链表,这个链表的表头是formats.

  为了说明,我们来看一下如何注册一个可执行文件的加载模块.

int register_binfmt(struct linux_binfmt * fmt)
{
     if (!fmt)
          return -EINVAL;
     write_lock(&binfmt_lock);
     //将其添加之链表
     list_add(&fmt->lh, &formats);
     write_unlock(&binfmt_lock);
     return 0;  
}
所以,在加载可执文件的时候,只要遍历formats这个链表,然后依次按module加载这个可执行文件.这正是search_binary_handler()所做的.代码如下:

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值