gpt4 book ai didi

c - 理解 fs/binfmt_elf.c

转载 作者:太空狗 更新时间:2023-10-29 11:38:52 25 4
gpt4 key购买 nike

我正在尝试理解 linux 源文件 /home/akash/Downloads/linux-3.4.3/fs/binfmt_elf.c 代码的一部分如下我卡住的地方。

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,
};

引用文件include/linux/binfmt.h

struct linux_binfmt {
struct list_head lh;
struct module *module;
int (*load_binary)(struct linux_binprm *, struct pt_regs * regs);
int (*load_shlib)(struct file *);
int (*core_dump)(struct coredump_params *cprm);
unsigned long min_coredump; /* minimal dump size */
};

请给出一些解释..

最佳答案

它是struct linux_binfmt类型结构的初始化elf_format(具有static存储持续时间,这意味着它存在于程序并且只初始化一次),使用 C99 中引入的语法,允许指定正在初始化的特定结构成员。在 C99 之前,struct 的初始值设定项需要按照成员在 struct 中声明的顺序列出值。

例如:

struct struct_a { int a; char c; };

在 C89 中,不可能仅显式初始化 c:

struct struct_a s = { 0, 'f' }; /* Have to provide an initial value for
'a', the 0, in order to provide an
initial value for 'c', the f. */

但在 C99 中,新语法使之成为可能:

struct struct_a s = { .c = 'f' };

struct 成员的类型:

  • lh 属于struct list_head 类型,未明确初始化。 lh 将被默认初始化(lh 的所有指针成员都被初始化为空指针,任何算术类型都将被初始化为零)。
  • module 的类型为 struct module* 并初始化为 THIS_MODULE
  • load_binary 是一个指向返回 int 并采用 struct linux_binptrm*struct pt_regs< 类型参数的函数的指针,并初始化为名为 load_elf_binary 的函数。
  • load_shlib 是一个指向函数的指针,该函数返回一个 int 并采用 struct file* 类型的参数并初始化为一个函数称为 load_elf_library
  • core_dump 是一个指向函数的指针,该函数返回一个 int 并采用 struct coredump_params* 的参数并初始化为一个名为elf_core_dump
  • min_coredumpunsigned long 类型并初始化为 ELF_EXEC_PAGESIZE

有关初始化语法和规则的完整说明,请参阅 C99 标准的 6.7.8 初始化部分。

关于c - 理解 fs/binfmt_elf.c,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12834013/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com