Linux execve加载ELF流程

最近需要看一下Linux是如何加载PIC的, 为此我查找了内核中相关代码。

大致流程似乎是:

  1. 用户态程序调用execve系统调用, 对应内核的sys_execve函数。
  2. 一通操作后, 会调用内核中的__do_execve_file函数。
  3. 其中会调用exec_binprm函数, 这是关键。
  4. 上述函数简单操作后, 会调用到search_binary_handler。该函数能够找到合适的binary formats handler, 然后调用这个handler的load_binary, 这是一个虚函数的指针。
  5. 以ELF格式为例, 最终调用的是load_elf_binary, 在这个文件中: https://elixir.bootlin.com/linux/latest/source/fs/binfmt_elf.c#L685
  6. load_elf_binary做了很多脏活累活。特别地, 如果这个ELF需要解释器的话(即有INTERP类型的程序头), 还要(递归地)加载解释器。

参考文献: https://lwn.net/Articles/630727/

发表评论

注意 - 你可以用以下 HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

:wink: :twisted: :roll: :oops: :mrgreen: :lol: :idea: :evil: :cry: :arrow: :?: :-| :-x :-o :-P :-D :-? :) :( :!: 8-O 8)

本文链接:https://twd2.me/archives/12274QrCode