Go to main content
マニュアルページ セク ション 1: ユー ザーコマンド

印刷ビューの終了

更新: 2016年12月6日
 
 

elfwrap(1)

名前

elfwrap - ELFファイルにデータをラップする

形式

elfwrap [-64] [-e end-symbol] [-n section-name]
[-o relobj-file] [-s start-symbol] [-z target=sparc | x86]
data-file ...

説明

elfwrap ユーティリティーは、1 つ以上のデータファイルから ELF 再配置可能オブジェクトファイルを作成します。再配置可能オブジェクトは、個々のセクション内の各データファイルを、セクションの参照に使用できるシンボルとともにカプセル化します。再配置可能オブジェクトを含めておくと、以後のリンク編集で便利です。ユーザーは、関連付けられているシンボルを使用すると、カプセル化されたデータを参照できます。

デフォルトでは、elfwrap が実行されるマシンに適した 32 ビット ELF 再配置可能オブジェクトが作成されます。–64 オプションを使用すると、64 ビット ELF 再配置可能オブジェクトを作成できます。–z target オプションを使用すると、特定の機械タイプ用の再配置可能オブジェクトを作成できます。

デフォルトでは、再配置可能オブジェクト a.wrap.o が作成されます。–o オプションを使用すると、別の再配置可能オブジェクト名を指定できます。

デフォルトでは、basename(1) ユーティリティーによって定義される各データファイルのベース名は、関連データに割り当てられるセクション名やシンボル名を作成する際に使用されます。–e–n、および –s オプションを使用すると、これらのデフォルトをオーバーライドできます。これらのオプションを使用しない場合、入力データファイル ISV/isv-data から出力される再配置可能オブジェクト内のデータには、次の ELF 情報が関連付けられます。

.isv-data という名前の ELF セクション

このセクションには、入力データファイルのすべての内容が含まれます。SHF_SUNW_ELFWRAP セクションフラグでセクションを識別することも可能です。

isv-data_start という名前の ELF シンボル

このシンボルは、.isv-data セクションの開始アドレスを示します。

isv-data_end という名前の ELF シンボル

このシンボルは、.isv-data セクションのあとにある、最初の場所のアドレスを示します。

オプション

サポートしているオプションは、次のとおりです。

–64

64 ビット ELF 再配置可能オブジェクトを作成します。

–e end-symbol

コマンド行でこのオプションのあとに続く入力データファイルの末尾に関連付けるシンボル名を指定します。

–n section-name

コマンド行でこのオプションのあとに続く入力データファイルに使用するセクション名を指定します。

–o relobj-file

relobj-file という名前の再配置可能オブジェクトを生成します。

–s start-symbol

コマンド行でこのオプションのあとに続く入力データファイルの先頭に関連付けるシンボル名を指定します。

–z target=sparc | x86

出力される再配置可能オブジェクトの機械タイプを指定します。サポートされるターゲットは、sparc および x86 です。–64 オプションも存在していて、対応する 64 ビット機械タイプが使用されている場合を除き、指定されたターゲット用の 32 ビット機械タイプが使用されます。デフォルトでは、elfwrap が実行されるマシン用の 32 ビットの再配置可能オブジェクトが生成されます。

–e–n、および –s オプションは、コマンド行でこれらのオプションのあとに続く入力データファイルに関連付けられます。これらのオプションを入力データファイルの前に指定することを繰り返して、各データファイルに一意の名前を関連付けることができます。複数の入力データファイルに同じ –e または –s オプションを適用すると、作成される再配置可能オブジェクト内に多重定義シンボルが定義されることになります。これにより、オブジェクトはそれ以上のリンク編集に適さなくなることがあります。このような方法でこれらのオプションを複数使用すると、elfedit から警告メッセージが発行されます。

次の例は、システム passwd ファイルとシステム group ファイルを再配置可能オブジェクト passgroup.o 内にカプセル化します。

example% elfwrap -o passgroup.o /etc/passwd /etc/group
example% elfdump -c -T PROGBITS passgroup.o

Section Header[1]:  sh_name: .passwd
  sh_addr:  0      sh_flags:  [ SHF_ALLOC SHF_SUNW_ELFWRAP ]
  sh_size:  0x5a2  sh_type:   [ SHT_PROGBITS ]
  ...

Section Header[2]:  sh_name: .group
  sh_addr:  0      sh_flags:  [ SHF_ALLOC SHF_SUNW_ELFWRAP ]
  sh_size:  0x199  sh_type:   [ SHT_PROGBITS ]
  ...

example% elfdump -s passgroup.o | egrep "passwd|group"
  [2]      0     0  SECT LOCL  D  0 .passwd        
  [3]      0     0  SECT LOCL  D  0 .group         
  [7]      0 0x5a2  OBJT GLOB  D  0 .passwd  passwd_start
  [8]  0x5a2     0  OBJT GLOB  D  0 .passwd  passwd_end
  [9]      0 0x199  OBJT GLOB  D  0 .group   group_start
 [10]  0x199     0  OBJT GLOB  D  0 .group   group_end

example% strings -N.passwd passgroup.o | head -1
root:x:0:0:Super-User:/:/usr/sbin/sh
example% strings -N.group passgroup.o | head -1
root::0:

次のユーザーコードから、再配置可能オブジェクト内のパスワードデータを参照することができます。

example% cat main.c
#include        <stdio.h>

extern char     passwd_start, passwd_end;

void main()
{
    char    *pstart = &passwd_start, *pend = &passwd_end;
    char    *str, *lstr;

    for (lstr = str = pstart; str < pend; str++) {
        if ((*str == '\n') && (str != (pend - 1)))  {
            (void) printf("%.*s", (++str - lstr), lstr);
            lstr = str;
        }
    }
}
example% cc -o main main.c passgroup.o
example% ./main
root:x:0:0:Super-User:/:/usr/sbin/sh
....
nobody4:x:65534:65534:SunOS 4.x NFS Anonymous Access User:/:

次の例では、同じ入力ファイルを使用しますが、そのデータに共通のセクション名を割り当て、各データに一意のシンボル名を関連付けます。

example% elfwrap -o passgroup.o -n .rodata \
    -s P_START -e P_END /etc/passwd \
    -s G_START -e G_END /etc/group
example% elfdump -c -T PROGBITS passgroup.o

Section Header[1]:  sh_name: .rodata
  sh_addr:  0      sh_flags:  [ SHF_ALLOC SHF_SUNW_ELFWRAP ]
  sh_size:  0x5a2  sh_type:   [ SHT_PROGBITS ]
  ...

Section Header[2]:  sh_name: .rodata
  sh_addr:  0      sh_flags:  [ SHF_ALLOC SHF_SUNW_ELFWRAP ]
  sh_size:  0x199  sh_type:   [ SHT_PROGBITS ]
  ...

example% elfdump -s passgroup.o | fgrep .rodata
  [2]      0     0  SECT LOCL  D  0 .rodata
  [3]      0     0  SECT LOCL  D  0 .rodata
  [7]      0 0x5a2  OBJT GLOB  D  0 .rodata  P_START
  [8]  0x5a2     0  OBJT GLOB  D  0 .rodata  P_END
  [9]      0 0x199  OBJT GLOB  D  0 .rodata  G_START
 [10]  0x199     0  OBJT GLOB  D  0 .rodata  G_END

ファイル

a.wrap.o

作成されるデフォルトの再配置可能オブジェクトファイル。

属性

属性についての詳細は、マニュアルページの attributes(5) を参照してください。

属性タイプ
属性値
使用条件
developer/base-developer-utilities
インタフェースの安定性
確実

関連項目

elfdump(1), ld(1), strings(1), elf(3ELF), attributes(5), ddi_modopen(9F)

Oracle Solaris 11.3 リンカーとライブラリガイド

elfwrap でカプセル化されたデータはすべて、対象のターゲットに適した形式である必要があります。

入力ファイルデータに関連付けるシンボル名の作成は、入力ファイルの名前によって駆動されます。したがって、同じ名前のシンボルが作成されないように、入力ファイルには一意の名前を付けるべきです。