GELF_XLATETOF(3) | FreeBSD Library Functions Manual | GELF_XLATETOF(3) |
名称
elf32_xlate, elf64_xlate, gelf_xlate — ファイルとメモリの間のデータを変換するライブラリ
ELF Access Library (libelf, -lelf)書式
#include < libelf.h> Elf_Data *
elf32_xlatetof( Elf_Data *dst, Elf_Data *src, unsigned int encode);
Elf_Data *
elf32_xlatetom( Elf_Data *dst, Elf_Data *src, unsigned int encode);
Elf_Data *
elf64_xlatetof( Elf_Data *dst, Elf_Data *src, unsigned int encode);
Elf_Data *
elf64_xlatetom( Elf_Data *dst, Elf_Data *src, unsigned int encode);
#include < gelf.h>
Elf_Data *
gelf_xlatetof( Elf *elf, Elf_Data *dst, Elf_Data *src, unsigned int encode);
Elf_Data *
gelf_xlatetom( Elf *elf, Elf_Data *dst, Elf_Data *src, unsigned int encode);
解説
これらの関数は、ELF データ構造のファイルとメモリ表現の間を変換します。 ELF データ構造のメモリ内の表現は、ホストプロセッサによって決定されるバイト順序とデータ整列制限を確認します。同じデータ構造のファイル表現は、ネイティブでないのバイト順序を使用することができ、さらに、ファイルで異なって配置されるかもしれません。関数 elf32_xlatetom(), elf64_xlatetom() と gelf_xlatetom() は、データをファイル表現からネイティブのメモリ内の表現に変換します。関数 elf32_xlatetof(), elf64_xlatetof(), と gelf_xlatetof() は、データをメモリ内の表現からファイル表現に変換します。
引数 src は、変換されるソース (コピー元) を記述する Elf_Data 記述子を示します。記述子の次の要素は、これらの関数を呼び出す前に設定される必要があります:
- d_buf
- 変換されるデータ領域の始まりを示す有効なポインタ値を設定します。
- d_size
- 変換されるソースデータ領域のバイト単位の合計サイズを設定します。
- d_type
- 変換されるソースデータのタイプを設定します。この値は、 Elf_Type 列挙型で定義された値の 1 つです。 Elf_Type 列挙型は、 elf(3) で説明されています。
- d_version
- 変換される ELF データ構造のバージョン番号を設定します。現在のバージョン EV_CURRENT だけが、サポートされています。
引数 dst は、送り先バッファについて記述します。 Elf_Data 記述子の次の要素は、これらの関数を呼び出す前に設定される必要があります:
- d_buf
- 変換されたデータを保持する送り先バッファの始まりを示す有効なポインタ値を設定します。この値は、インプレース (現場) 変換が試みられ場合に、ソースバッファのものと同じであるかもしれません。
- d_size
- バイト単位の送り先バッファのサイズを設定します。この値は、関数呼び出しが成功するなら、変更されます。
- d_version
- 送り先の必要なバージョン番号を設定します。現在のバージョン EV_CURRENT だけが、サポートされています。
これらの変換ルーチンによって、ソースと送り先バッファは、送り先が変換されたデータを保持することができるくらい大きいなら、インプレース (現場) 変換が行われる場合に、一致することができます。ソースと送り先バッファ間の他の種類のオーバラップは、許可されません。
変換が成功して終了のとき、 dst 記述子の次のフィールドは、変更されるでしょう:
- d_size
- 変換されたデータのバイト単位のサイズを設定します。
- d_type
- ソースデータ記述子の d_type 値を設定します。
引数 encode は、ファイルオブジェクトが表現されるエンコードを指定します。それは、次の 1 つでなければなりません:
- ELFDATANONE
- ファイルオブジェクトは、ライブラリのネイティブのバイト順序を使用します。
- ELFDATA2LSB
- ファイルオブジェクトは、リトルエンディアンの順序を使用します。
- ELFDATA2MSB
- ファイルオブジェクトは、ビッグエンディアンの順序を使用します。
関数 gelf_xlatetof() と gelf_xlatetom() は、引数 elf のクラスに基づく 32 ビットまたは 64 ビットの適切な変換を選択します。
戻り値
これらの関数は、成功するなら、引数 dst を返し、エラーの場合は、NULL を返します。使用例
しなければならないことエラー
これらの関数は、次のエラーで失敗するかもしれません:- [ ELF_E_ARGUMENT]
- 引数の 1 つ src, dst または elf が NULL でした。
- [ ELF_E_ARGUMENT]
- 引数 src と dst は等しかったです。
- [ ELF_E_ARGUMENT]
- 必要なエンコードのパラメータは、 ELFDATANONE, ELFDATA2LSB または ELFDATA2MSB の 1 つではありませんでした。
- [ ELF_E_ARGUMENT]
- 引数 src の d_type フィールドに、サポートされていないタイプを指定しました。
- [ ELF_E_DATA]
- src 引数に、基本的なタイプの整数倍でなかったバッファサイズを指定しました。
- [ ELF_E_DATA]
- dst 引数に、小さ過ぎたバッファサイズを指定しました。
- [ ELF_E_DATA]
- 引数 dst は、ソースバッファとオーバラップする送り先バッファを指定しました。
- [ ELF_E_DATA]
- メモリへの変換のための送り先バッファが、基本的な ELF タイプに不適切な整列でした。
- [ ELF_E_DATA]
- ファイルに変換するためのソースバッファが、基本的な ELF タイプに不適切な整列でした。
- [ ELF_E_UNIMPL]
- 引数 dst と src のバージョン番号が、同じではありませんでした。
- [ ELF_E_UNIMPL]
- 引数 src が、現在サポートされていないタイプの変換を要求しました。
- [ ELF_E_VERSION]
- 引数 src に、サポートされていないバージョン番号を指定しました。
July 24, 2006 | FreeBSD |