binfmt_elf.c
关键参考: https://lwn.net/Articles/631631/
通用路径在 fs/exec.c:
execve / execveat
-> do_execveat_common()
-> bprm_execve()
-> exec_binprm()
-> search_binary_handler()
-> fmt->load_binary(bprm)
对 ELF 来说就是 load_elf_binary()
search_binary_handler() 会遍历全局 formats 链表。每个元素是一个 struct linux_binfmt,其中 load_binary 是真正的格式识别和装载函数。binfmt_elf.c 中注册的对象是:
static struct linux_binfmt elf_format = {
.module = THIS_MODULE,
.load_binary = load_elf_binary,
#ifdef CONFIG_COREDUMP
.core_dump = elf_core_dump,
.min_coredump = ELF_EXEC_PAGESIZE,
#endif
};
static struct linux_binfmt elf_format = {
.module = THIS_MODULE,
.load_binary = load_elf_binary,
.load_shlib = load_elf_library,
.core_dump = elf_core_dump,
.min_coredump = ELF_EXEC_PAGESIZE,
};
本站所有文章转发 CSDN 将按侵权追究法律责任,其它情况随意。