2

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 */
};

これについて説明をお願いします..

4

2 に答える 2

5

これは、C99 で導入された、初期化される特定の構造体メンバーを指定できるようにする構文を使用して、struct linux_binfmtnamed型の構造体を初期化しますelf_format(保存期間を持ち、プログラムの存続期間中に存在し、1 回だけ初期化されることを意味します)。staticC99 より前では、 のイニシャライザは、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メンバーのタイプ:

  • lhstruct list_head明示的に初期化されていない型です。lhデフォルトで初期化されます (ポインターであるメンバーはlhnull ポインターに初期化され、算術型はゼロに初期化されます)。
  • modulestruct module*であり、 に初期化されTHIS_MODULEます。
  • load_binaryは、 を返す関数へのポインタであり、型andintの引数を取り、 という関数に初期化されます。struct linux_binptrm*struct pt_regsload_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ます。

初期化の構文と規則の完全な説明については、セクション6.7.8 C99 標準の初期化を参照してください。

于 2012-10-11T07:08:35.590 に答える
0

elf_formatlinux_binfmtstatic として宣言された型の変数です。

のメンバーに割り当てられた値elf_format

    .module         = THIS_MODULE,
    .load_binary    = load_elf_binary,    /* Function pointer assigned with functions */
    .load_shlib     = load_elf_library,   // do --
    .core_dump      = elf_core_dump,      // do --
    .min_coredump   = ELF_EXEC_PAGESIZE,
于 2012-10-11T07:07:56.213 に答える