手册页部分 1: 用户命令

退出打印视图

更新时间: 2014 年 7 月
 
 

pvs(1)

名称

pvs - 显示动态目标文件的内部版本信息

用法概要

pvs [-Cdlnorsv] [-I 
index-expr] [-N name] 
file...

描述

pvs 实用程序显示 ELF 文件中包含的任何内部版本信息。通常情况下,这些文件是动态可执行文件和共享目标文件,并且有可能是可重定位的目标文件。此版本信息可以是以下两个类别中的一种:

  • 版本定义

  • 版本依赖项

版本定义描述了可通过 ELF 文件提供的接口。每个版本定义都与该文件提供的一组全局符号相关联。在创建某个文件期间,可以通过链接编辑器使用 – M 选项和相关的 mapfile 指令将版本定义分配给该文件。有关更多详细信息,请参见Oracle Solaris 11.2 链接程序和库指南

版本依赖项描述了动态目标文件对任何共享目标文件依赖项的版本定义的绑定需求。如果构建的动态目标文件引用了某个共享目标文件,链接编辑器将在动态目标文件内记录相应的信息,指示该共享目标文件是一个依赖项。在运行时必须满足此依赖性。如果共享目标文件也包含版本定义,则还会在正在创建的动态目标文件中记录用来满足动态目标文件的全局符号需求的那些版本定义。在进程初始化时,运行时链接程序将版本依赖项用作一种验证方法,用以验证用来构建进程的动态目标文件的接口需求。

选项

支持以下选项。如果 –d– r 选项均未指定,则会同时启用两者。

–C

取消改编 C++ 符号名。

–d

输出版本定义信息。

–I index-expr

通过特定的版本索引或索引范围来限定要检查的版本。例如,可使用以下命令显示某个目标文件中索引为 3 的版本:

example% pvs -I 3 filename

index-expr 可以是指定一个特定版本的单个非负整数值,如上一示例中所示。另外,index-expr 还可以包含两个这样的值,以冒号 (:) 分隔,指示版本的范围。以下示例显示文件中的版本 3、4 和 5:

example% pvs -I 3:5 filename

在指定索引范围时,可以省略第二个值以指示文件中的最后一项。例如,以下语句列出从第 10 个到最后的所有版本:

example% pvs -I 10: filename

有关匹配选项(–I–N)的更多信息,请参见“匹配选项”。

–l

输出由于版本更新而从全局绑定降级为本机绑定的符号。按照惯例,这些符号条目位于 .symtab 部分中,介于表示输出文件的 FILE 符号和表示用于生成输出文件的第一个输入文件的 FILE 符号之间。这些降级的符号条目分配有虚构的版本定义 _LOCAL_。如果已对文件执行了剥除操作(请参见 strip(1)),或者无法确定符号条目约定,则不会输出任何降级的符号。

隐式使用 –l 选项会启用 –s 选项。

–n

标准化版本定义信息。缺省情况下,将显示目标文件内的所有版本定义。不过,版本定义可以继承其他的版本定义。在标准化形式下,只会显示每个继承列表的标题。

–N name

–d 选项一起使用时,–N 仅输出给定版本定义 name 及其继承的任何版本定义的信息。

–r 选项一起使用时,–N 仅输出给定依赖项文件 name 的信息。可以限定依赖项文件中的某个特定版本,方法是将版本放在文件名之后的括号中:

example% pvs -N 'dependency (version)' filename

有关匹配选项(–I–N)的更多信息,请参见“匹配选项”。

–o

创建单行版本定义输出。缺省情况下,文件、版本定义和任何符号输出均以缩进形式显示,以便于进行人工检查。此选项在每个输出行前附加文件和版本定义名称,在使用自动工具进行分析时,此选项显得尤为有用。

–r

输出版本依赖项性(需求)信息。

–s

输出与每个版本定义关联的符号。显示数据项的大小(字节)以及由目标文件定义的版本中的任何数据符号。

–v

详细输出。指示任何弱版本定义以及任何版本定义继承。与 –N–d 选项一起使用时,还会显示基本版本定义的继承。与 –s 选项一起使用时,还会显示版本符号定义。

操作数

支持以下操作数。

file

要显示其内部版本信息的 ELF 文件。

用法

匹配选项

–I–N 选项统称为匹配选项。这些选项用于通过索引或名称来缩小要检查的版本范围。

在一个给定的 pvs 调用中,可以混合使用任意数量和类型的匹配选项。在这种情况下,pvs 显示与所使用的任何匹配选项匹配的所有版本的超集。使用此功能,可以通过用于指定每个项目的最简便形式来选择复杂的项目分组。

示例

示例 1 显示版本定义

以下示例显示 libelf.so.1 的版本定义:

% pvs -d /lib/libelf.so.1
	libelf.so.1;
	SUNW_1.1
示例 2 创建单行显示

可以使用 –n–o 选项创建标准的单行显示,这适用于创建映射文件版本控制指令。

% pvs -don /lib/libelf.so.1
/lib/libelf.so.1 -	SUNW_1.1;
示例 3 显示版本需求

以下示例显示 lddpvs 的版本需求:

% pvs -r /usr/bin/ldd /usr/bin/pvs
/usr/bin/ldd:
	libelf.so.1 (SUNW_1.1);
	libc.so.1 (SUNW_1.1);
/usr/bin/pvs:
	libelf.so.1 (SUNW_1.1);
	libc.so.1 (SUNW_1.1);
示例 4 确定依赖项符号版本

以下示例显示 ldd 命令预期在运行时从其中找到 printf 函数的共享目标文件及其属于的版本:

% pvs -ors /usr/bin/ldd | grep ' printf'
/usr/bin/ldd -  libc.so.1 (SYSVABI_1.3): printf;

示例 5 确定特定版本中的所有依赖项符号

可使用 –N 选项获取某个依赖项中属于某个特定版本的所有符号的列表。确定 ldd 将从 libc.so.1 的版本 SYSVABI_1.3 中找到的符号:

% pvs -s -N 'libc.so.1 (SYSVABI_1.3)' /usr/bin/ldd

       libc.so.1 (SYSVABI_1.3):
               _exit;
               strstr;
               printf;
               __fpstart;
               strncmp;
               lseek;
               strcmp;
               getopt;
               execl;
               close;
               fflush;
               wait;
               strerror;
               putenv;
               sprintf;
               getenv;
               open;
               perror;
               fork;
               strlen;
               geteuid;
               access;
               setlocale;
               atexit;
               fprintf;
               exit;
               read;
               malloc;

请注意,ldd 使用的符号的具体列表在各个 Solaris 发行版之间可能会更改。

示例 6 按索引显示所定义的基本版本

按照惯例,由目标文件定义的基本全局版本具有该目标文件的名称。例如,pvs 的基本版本的名称为 'pvs'。任何目标文件的基本版本始终是版本索引 1。因此,可使用 –I 选项显示任何目标文件的基本版本,而不需要指定其名称:

% pvs -v -I 1 /usr/bin/pvs
       pvs [BASE];

退出状态

如果没有找到所请求的版本信息,则返回非零值。否则,将返回 0 值。

如果以下任何内容属实,都将判定为无法找到版本信息:

  • 指定了 –d 选项,并且没有找到版本定义。

  • 指定了 –r 选项,并且没有找到版本需求。

  • 没有指定 –d–r 选项,并且没有找到版本定义或版本需求。

属性

有关下列属性的说明,请参见 attributes(5)

属性类型
属性值
可用性
developer/base-developer-utilities

另请参见

elfdump(1)ld(1)ldd(1)strip(1)elf(3ELF)attributes(5)

Oracle Solaris 11.2 链接程序和库指南