'\" te .\" Copyright (c) 2008, 2014, Oracle and/or its affiliates.All rights reserved.. .TH elfwrap 1 "2014 年 4 月 23 日" "SunOS 5.11" "ユーザーコマンド" .SH 名前 elfwrap \- \fBELF\fR ファイルにデータをラップする .SH 形式 .LP .nf \fBelfwrap\fR [\fB-64\fR] [\fB-e\fR \fIend-symbol\fR] [\fB-n\fR \fIsection-name\fR] [\fB-o\fR \fIrelobj-file\fR] [\fB-s\fR \fIstart-symbol\fR] [\fB-z\fR target=\fBsparc\fR | \fBx86\fR] \fIdata-file\fR ... .fi .SH 機能説明 .sp .LP \fBelfwrap\fR ユーティリティーは、1 つ以上のデータファイルから \fBELF\fR 再配置可能オブジェクトファイルを作成します。再配置可能オブジェクトは、個々のセクション内の各データファイルを、セクションの参照に使用できるシンボルとともにカプセル化します。再配置可能オブジェクトを含めておくと、以後のリンク編集で便利です。ユーザーは、関連付けられているシンボルを使用すると、カプセル化されたデータを参照できます。 .sp .LP デフォルトでは、\fBelfwrap\fR が実行されるマシンに適した 32 ビット \fBELF\fR 再配置可能オブジェクトが作成されます。\fB-64\fR オプションを使用すると、64 ビット \fBELF\fR 再配置可能オブジェクトを作成できます。\fB-z target\fR オプションを使用すると、特定の機械タイプ用の再配置可能オブジェクトを作成できます。 .sp .LP デフォルトでは、再配置可能オブジェクト \fBa.wrap.o\fR が作成されます。\fB-o\fR オプションを使用すると、別の再配置可能オブジェクト名を指定できます。 .sp .LP デフォルトでは、\fBbasename\fR(1) ユーティリティーによって定義される各データファイルのベース名は、関連データに割り当てられるセクション名やシンボル名を作成する際に使用されます。\fB-e\fR、\fB-n\fR、および \fB-s\fR オプションを使用すると、これらのデフォルトをオーバーライドできます。これらのオプションを使用しない場合、入力データファイル \fBISV/isv-data\fR から出力される再配置可能オブジェクト内のデータには、次の \fBELF\fR 情報が関連付けられます。 .sp .ne 2 .mk .na \fB\fB\&.isv-data\fR という名前の \fBELF\fR セクション\fR .ad .sp .6 .RS 4n このセクションには、入力データファイルのすべての内容が含まれます。\fBSHF_SUNW_ELFWRAP\fR セクションフラグでセクションを識別することも可能です。 .RE .sp .ne 2 .mk .na \fB\fBisv-data_start\fR という名前の \fBELF\fR シンボル\fR .ad .sp .6 .RS 4n このシンボルは、\fB\&.isv-data\fR セクションの開始アドレスを示します。 .RE .sp .ne 2 .mk .na \fB\fBisv-data_end\fR という名前の \fBELF\fR シンボル\fR .ad .sp .6 .RS 4n このシンボルは、\fB\&.isv-data\fR セクションのあとにある、最初の場所のアドレスを示します。 .RE .SH オプション .sp .LP サポートしているオプションは、次のとおりです。 .sp .ne 2 .mk .na \fB\fB-64\fR\fR .ad .sp .6 .RS 4n 64 ビット \fBELF\fR 再配置可能オブジェクトを作成します。 .RE .sp .ne 2 .mk .na \fB\fB-e\fR \fIend-symbol\fR\fR .ad .sp .6 .RS 4n コマンド行でこのオプションのあとに続く入力データファイルの末尾に関連付けるシンボル名を指定します。 .RE .sp .ne 2 .mk .na \fB\fB-n\fR \fIsection-name\fR\fR .ad .sp .6 .RS 4n コマンド行でこのオプションのあとに続く入力データファイルに使用するセクション名を指定します。 .RE .sp .ne 2 .mk .na \fB\fB-o\fR \fIrelobj-file\fR\fR .ad .sp .6 .RS 4n \fIrelobj-file\fR という名前の再配置可能オブジェクトを生成します。 .RE .sp .ne 2 .mk .na \fB\fB-s\fR \fIstart-symbol\fR\fR .ad .sp .6 .RS 4n コマンド行でこのオプションのあとに続く入力データファイルの先頭に関連付けるシンボル名を指定します。 .RE .sp .ne 2 .mk .na \fB\fB-z\fR target=\fBsparc\fR | \fBx86\fR\fR .ad .sp .6 .RS 4n 出力される再配置可能オブジェクトの機械タイプを指定します。サポートされるターゲットは、\fBsparc\fR および \fBx86\fR です。\fB-64\fR オプションも存在していて、対応する 64 ビット機械タイプが使用されている場合を除き、指定されたターゲット用の 32 ビット機械タイプが使用されます。デフォルトでは、\fBelfwrap\fR が実行されるマシン用の 32 ビットの再配置可能オブジェクトが生成されます。 .RE .sp .LP \fB-e\fR、\fB-n\fR、および \fB-s\fR オプションは、コマンド行でこれらのオプションのあとに続く入力データファイルに関連付けられます。これらのオプションを入力データファイルの前に指定することを繰り返して、各データファイルに一意の名前を関連付けることができます。複数の入力データファイルに同じ \fB-e\fR または \fB-s\fR オプションを適用すると、作成される再配置可能オブジェクト内に多重定義シンボルが定義されることになります。これにより、オブジェクトはそれ以上のリンク編集に適さなくなることがあります。このような方法でこれらのオプションを複数使用すると、\fBelfedit\fR から警告メッセージが発行されます。 .SH 使用例 .sp .LP 次の例は、システム \fBpasswd\fR ファイルとシステム \fBgroup\fR ファイルを再配置可能オブジェクト \fBpassgroup.o\fR 内にカプセル化します。 .sp .in +2 .nf example% \fBelfwrap -o passgroup.o /etc/passwd /etc/group\fR example% \fBelfdump -c -T PROGBITS passgroup.o\fR 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% \fBelfdump -s passgroup.o | egrep "passwd|group"\fR [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% \fBstrings -N.passwd passgroup.o | head -1\fR root:x:0:0:Super-User:/:/usr/sbin/sh example% \fBstrings -N.group passgroup.o | head -1\fR root::0: .fi .in -2 .sp .sp .LP 次のユーザーコードから、再配置可能オブジェクト内のパスワードデータを参照することができます。 .sp .in +2 .nf example% \fBcat main.c\fR #include 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 == '\en') && (str != (pend - 1))) { (void) printf("%.*s", (++str - lstr), lstr); lstr = str; } } } example% \fBcc -o main main.c passgroup.o\fR example% \fB\&./main\fR root:x:0:0:Super-User:/:/usr/sbin/sh \&.... nobody4:x:65534:65534:SunOS 4.x NFS Anonymous Access User:/: .fi .in -2 .sp .sp .LP 次の例では、同じ入力ファイルを使用しますが、そのデータに共通のセクション名を割り当て、各データに一意のシンボル名を関連付けます。 .sp .in +2 .nf example% \fBelfwrap -o passgroup.o -n .rodata \e\fR \fB-s P_START -e P_END /etc/passwd \e\fR \fB-s G_START -e G_END /etc/group\fR example% \fBelfdump -c -T PROGBITS passgroup.o\fR 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% \fBelfdump -s passgroup.o | fgrep .rodata\fR [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 .fi .in -2 .sp .SH ファイル .sp .ne 2 .mk .na \fB\fBa.wrap.o\fR\fR .ad .RS 12n .rt 作成されるデフォルトの再配置可能オブジェクトファイル。 .RE .SH 属性 .sp .LP 属性についての詳細は、マニュアルページの \fBattributes\fR(5) を参照してください。 .sp .sp .TS tab() box; cw(2.75i) |cw(2.75i) lw(2.75i) |lw(2.75i) . 属性タイプ属性値 _ 使用条件developer/base-developer-utilities _ インタフェースの安定性確実 .TE .SH 関連項目 .sp .LP \fBelfdump\fR(1), \fBld\fR(1), \fBstrings\fR(1), \fBelf\fR(3ELF), \fBattributes\fR(5), \fBddi_modopen\fR(9F) .sp .LP \fI『Oracle Solaris 11.3 Linkers and Libraries Guide』\fR .SH 注意事項 .sp .LP \fBelfwrap\fR でカプセル化されたデータはすべて、対象のターゲットに適した形式である必要があります。 .sp .LP 入力ファイルデータに関連付けるシンボル名の作成は、入力ファイルの名前によって駆動されます。したがって、同じ名前のシンボルが作成されないように、入力ファイルには一意の名前を付けるべきです。