EN JA
GELF_NEWEHDR(3)
GELF_NEWEHDR(3) FreeBSD Library Functions Manual GELF_NEWEHDR(3)

名称

elf32_newehdr, elf64_newehdr, gelf_newehdrオブジェクトファイルヘッダを検索するか、または割り付ける

ライブラリ

ELF Access Library (libelf, -lelf)

書式

#include < libelf.h>

Elf32_Ehdr *
elf32_newehdr( Elf *elf);

Elf64_Ehdr *
elf64_newehdr( Elf *elf);

#include < gelf.h>

void *
gelf_newehdr( Elf *elf, int elfclass);

解説

これらの関数は、 ELF 記述子 elf から ELF ヘッダを検索し、必要なら、新しいヘッダを割り付けます。ファイルデータ構造は、 elf(3) で説明されるように、それらのメモリ内表現に変換します。

関数 elf32_newehdr() は、32 ビットの Elf32_Ehdr 構造へのポインタを返します。関数 elf64_newehdr() は、64 ビットの Elf64_Ehdr 構造へのポインタを返します。

引数 elfclass に値 ELFCLASS32 があるとき、関数 gelf_newehdr() は、 elf32_newehdr( elf) によって返された値を返します。引数 elfclass に値 ELFCLASS64 があるとき、それは elf64_newehdr( elf) によって返された値を返します。

新しいヘッダ構造を割り付けるなら、構造体のメンバは、次のように初期化されます:

e_ident[EI_MAG0..EI_MAG3]
オフセット EI_MAG0, EI_MAG1, EI_MAG2EI_MAG3 の識別バイトは、 ELF シグネチャ (署名) に設定されます。
e_ident[EI_CLASS]
オフセット EI_CLASS の識別バイトは、呼び出された関数に関連している ELF のクラス、または、関数 gelf_newehdr() のための引数 elfclass に設定されます。
e_ident[EI_DATA]
オフセット EI_DATA の識別バイトは、 ELFDATANONE に設定されます。
e_ident[EI_VERSION]
オフセット EI_VERSION の識別バイトは、 elf_version(3) への前の呼び出しによって設定された ELF ライブラリの操作バージョンに設定されます。
e_machine
は、 EM_NONE に設定されます。
e_type
は、 ELF_K_NONE に設定されます。
e_version
は、 elf_version(3) への前の呼び出しで設定された ELF ライブラリの操作バージョンに設定されます。

ヘッダの他のメンバは、0 に設定されます。アプリケーションは、 elf_update() を呼び出す前に必要に応じて、これらの値を変更する責任があります。

成功するなら、これらの 3 つの関数は、ELF 記述子 elfELF_F_DIRTY フラグを設定します。

戻り値

これらの関数は、成功するなら、変換されたヘッダ記述子へのポインタを返し、失敗すれば、NULL を返します。

エラー

これらの関数は、次のエラーで失敗するかもしれません:
[ ELF_E_ARGUMENT]
引数 elf は NULL でした。
[ ELF_E_ARGUMENT]
引数 elf は ELF iオブジェクトのための記述子ではありませんでした。
[ ELF_E_ARGUMENT]
引数 elfclass には、サポートされない値がありました。
[ ELF_E_ARGUMENT]
ELF 記述子 elf のクラスは、要求された操作のものに一致しませんでした。
[ ELF_E_ARGUMENT]
関数 gelf_newehdr() に関して、引数 elf のクラスは、 ELFCLASSNONE でなく、引数 elfclass に一致しませんでした。
[ ELF_E_CLASS]
記述子 elf の ELF のクラスは、呼び出される API 関数のものに一致しませんでした。
[ ELF_E_HEADER]
不正な形式の ELF ヘッダが検出されました。
[ ELF_E_RESOURCE]
メモリ不足の状態が実行の間に検出されました。
[ ELF_E_SECTION]
引数 elf の ELF 記述子が、拡張された番号付けに使用される規約を順守しませんでした。
[ ELF_E_VERSION]
ELF 記述子 elf には、サポートされない ELF バージョン番号がありました。
October 22, 2007 FreeBSD