elfwrap [-64] [-o relobj-file] [-z target=sparc | x86] data-file ...
elfwrap 实用程序可利用一个或多个数据文件创建 ELF 可重定位目标文件。可重定位目标文件将每个数据文件封装在单个节中,且其中带有可用于引用该节的符号。可重定位目标文件适合于通过后续链接编辑来包含在程序中。用户可使用关联的符号引用所封装的数据。
缺省情况下,将创建 32 位 ELF 可重定位目标文件,这适用于在其上执行 elfwrap 的计算机。–64 选项可用于创建 64 位 ELF 可重定位目标文件。–z target 选项可用于针对特定机器类型创建可重定位目标文件。
缺省情况下,创建的可重定位目标文件为 a.wrap.o。可以使用 –o 选项来指定备用可重定位目标文件名称。
basename(1) 实用程序定义的每个数据文件的基名用于创建分配给关联数据的节和符号名称。例如,如果输入数据文件是 ISV/isv-data,则以下 ELF 信息将与输出可重定位对象内数据关联。
该节包含输入数据文件的所有内容。还使用 SHF_SUNW_ELFWRAP 节标志标识节。
该符号反映 .isv-data 节的起始地址。
该符号反映 .isv-data 节之后第一个位置的地址。
支持以下选项:
创建 64 位 ELF 可重定位目标文件。
生成名为 relobj-file 的可重定位目标文件。
指定输出可重定位目标文件的机器类型。支持的目标有 sparc 和 x86。使用指定目标的 32 位机器类型,除非存在 –64 选项,这种情况下使用相应的 64 位机器类型。缺省情况下,生成的是 32 位可重定位目标文件,适用于在其上执行 elfwrap 的计算机。
以下示例将系统文件 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:/:
创建的缺省可重定位目标文件。
有关下列属性的说明,请参见 attributes(5):
|
elfdump(1)、ld(1)、strings(1)、elf(3ELF)、attributes(5)、ddi_modopen(9F)
通过 elfwrap 封装的所有数据必须采用适合目标的格式。
输入文件的名称促使符号名称的创建与输入文件数据相关联。因此,应唯一地命名输入文件来避免创建同名的符号。