这是命令 abicheck,可以使用我们的多个免费在线工作站之一在 OnWorks 免费托管服务提供商中运行,例如 Ubuntu Online、Fedora Online、Windows 在线模拟器或 MAC OS 在线模拟器
程序:
您的姓名
abicheck - 检查应用程序二进制文件中对私有或演化符号的调用
库和一些系统库的静态链接。
概要
比查 [-h] [-k] [-a] [-I] [-v] [-f 列表文件] [-要么 外档] [-p 图案] [-e 图案] [-j
职位] [-l 图书馆] [-L 路径] [(-s|-S) 数据库文件] [(-d|-D) 数据库文件] [-O 数据库文件] [-一种
列表文件] 档
商品描述
比查 在应用程序二进制文件上运行并在出现以下任何情况时发出警告
检测到三个条件:
· 私做 符号 用法。 私有符号是库中的函数或数据变量
包内部的包。 它们由包中的库使用
用于内部通信,而不是应用程序开发人员的 API/ABI 的一部分
应该使用。
· 演变 符号 用法。 演化符号是库中的函数或数据变量
供开发人员使用但已标记为“进化”或
“不稳定”,因为它们可能会在以后的版本中变得不兼容或消失
库包。
· 静止 链接。 将系统库(例如 libc.a)静态链接到
应用程序通常不是一个好主意,因为它“锁定”到的系统库代码
应用程序二进制文件可能与系统的更高版本不兼容。 abicheck
尝试检测一些系统库的静态链接。
默认行为是,对于检查的每个二进制对象,检查来自该对象的直接调用
仅限二进制对象。 这 -l 选项允许二进制对象引入的库
他们的电话也被检查了。
配置
支持以下选项:
-k 即使存在严重错误,也要继续检查二进制文件(动态链接器报告
未解决的符号, dd(1) 失败,未检测到符号)。
-h 打印出长格式的帮助。
-v 冗长。 打印附加信息。
-f 列表文件
这款 列表文件 是一个包含要检查的二进制对象列表的文件,每行一个。
此列表附加到命令行上作为参数提供的任何文件。 如果
列表文件 是“-”,则使用标准输入。
-o 输出文件
将输出写入 输出文件 而不是标准输出。
-p 模式
修改版本名称模式匹配标签私有版本集。 默认是
/私人的/ 使用不区分大小写的匹配。
如果正则表达式的一个组件 模式 连续包含两个冒号: 帕特1::帕特2,
然后通过检查是否激活符号级匹配 版本::符号 or
图书馆::符号 火柴 模式 (其中符号名称、版本(如果有)和
库基名被替换 符号, 版本及 图书馆)。 例如,
-p 'FOO_VERS.*::_foopriv'
or
-p 'libfoo.so.*::_foopriv'
-e 模式
与...一样 -p 但对于“不断发展的”接口。
-L 路径
设置 LD_LIBRARY_PATH 环境变量 路径 在调用动态之前
链接器。 用 -L "" 取消设置 LD_LIBRARY_PATH。
如果其中一个组件 路径 是字符串“find”,然后是所有共享库
in 档 找到并将它们的路径插入到“查找”位置。 注意
顺序是随机的。
-l 图书馆
添加共享库的基本名称或完整路径名 图书馆 到列表中
进行私人呼叫时要检查的对象。 此选项可能会出现多次
一次在命令行上并且是附加的。 默认情况下,仅直接呼叫来自
检查系统库的二进制文件。 这 -l 开关允许检查
间接调用,例如:app -> supportlib -> systemlib。
-a 在检查和收集所有共享的列表之前循环遍历所有二进制文件
对象。 获取找到的每个共享对象的基本名称,并像
指定 -l option 选项,然后运行 abicheck 检查。 这边走,
检查来自所有“应用程序内部”对象的调用,而不仅仅是检查
直接调用。 (当共享对象没有它们的依赖时很有用
记录。)
-I 检查时忽略共享库,只检查可执行文件。 兼容 -一种,
将首先搜索库,然后不检查。
-d 数据库文件, -D 数据库文件
为动态(公共与私有)指定后备平面文件符号数据库
测试。 如果库没有版本控制(即
图书馆本身不存在分类)。 用 -D 表明只有
信息来自 数据库文件 应该使用。 线路输入 数据库文件 可以是其中之一
形式:
图书馆|符号
图书馆|类|符号
图书馆|文件=路径
图书馆 必须是要指定的库的完整路径(不能是
基名)。
第一种形式标记 符号 作为私人。
第二种形式标记 符号 - 程 哪里 程 可能是公共的、私人的或
进化。
第三种形式表示文件 径 应该在需要时打开 图书馆 is
第一次遇到。 文件 径 包含前两种形式的行,除了
图书馆 场地。 第三种形式是一种加速,以避免处理许多分类
运行中从未遇到过的库的行。
-O 数据库文件
指定覆盖文件以修改动态的符号分类
(公共与私人)测试。 覆盖文件的格式如下:
图书馆|符号|类
库可以是完整路径或基本名称。 如果库是“__SKIP__”符号
对于在其中找到的任何库,将被忽略。该类可以是“公共的”,
“私人”、“发展中”或“已删除”。 “已删除”类是特例,意味着
在某些版本中,该符号已从库中删除。 符号“__ALL__”为
“已删除”类意味着整个库已被删除或不稳定
使用。
例子:
libfoo.so.1|__bar|私有
/lib/libxyz.so.1|baz|公共
__跳过__|__fputwc_xpg5
这些设置会覆盖库内的任何分类(来自库
版本控制,可从 PVS(1)等)。
-A 列表文件
将感兴趣的 ABI 库设置为中列出的库 列表文件 (充分
路径名,每行一个)。 只会检查对这些库的调用; 全部
其他库调用将被忽略。
-s 数据库文件, -S 数据库文件
为静态链接测试指定更广泛的符号数据库。 数据库文件 也许
逗号分隔的文件列表。 如果文件是静态存档 (lib*.a),则它是
处理以提取符号。 否则它是一个数据库文件,由
形式符号|库:模块的行例如:
shmat|/usr/lib/libc.a:shmsys.o
shmctl|/usr/lib/libc.a:shmsys.o
shmdt|/usr/lib/libc.a:shmsys.o
shmget|/usr/lib/libc.a:shmsys.o
...
当 module.o 中的所有符号都在应用程序中定义时,静态链接
假定该模块(和相应的库档案)。 用 -S 以表示
只应执行静态链接测试。
使用 VHDL 语言编写 -S INT 只做静态链接检查和使用内部数据库。
使用 VHDL 语言编写 -s 没有 or -S 没有 完全跳过静态链接检查。
-j 工作
运行 工作 作为单独的进程并行。 暗示 -k. 主要用于
多CPU机器在哪里 工作 应该接近处理器的数量。
输出收集在 tmp 文件中,并在运行结束时一次性打印为
每个工作完成。
If 工作 是“-”、“检测”或“n”,则 工作 将被设置为一个数字取决于
当前机器上的处理器数量(如果可以确定)。
操作数
支持以下操作数:
档 要检查的应用程序二进制对象列表。
OUTPUT
每个问题有一行(每个二进制检查可能有多个问题)
如下所示:
如果没有发现问题:
文件名: 好
如果使用私有符号:
文档名称: 私人的 (图书馆:私人版本) 私人符号
如果进化符号用法:
文件名: 进化 (图书馆:进化_vers) 进化符号
如果文件静态链接在系统归档库中:
文件名:STATIC_LINK(档案)
如果跳过文件检查:
文件名: 跳过 (原因)
在使用中删除的类 -O 覆盖文件选项,这些问题可能是
发现:
如果某个符号已从某个版本的库中删除:
文件名:DELETED_SYM: 符号/图书馆
(图书馆 如果符号未绑定,则将“未绑定”)
如果整个库已在某个版本上被删除或在其他方面不稳定
使用:
文件名:UNSTABLE_LIB: 图书馆-soname = 库路径
(库路径 如果找不到库,可能是“找不到文件”)
以下问题将导致致命错误,除非 -k 使用选项:
如果动态链接器无法解析 N 符号当 dd -r 运行:
文件名:UNBOUND_SYMBOLS: N
如果动态链接器没有发现动态绑定:
文件名:NO_BINDINGS
If dd -r - LD_DEBUG=文件,绑定 失败:
文件名:LDD_ERROR
在后三种情况下运行 dd -r 关于二进制文件的更多信息
出错了(注意 比查 运行 dd -r - LD_DEBUG=文件,绑定 放)。 一些
系统动态链接器不会处理 SUID 程序 LD_调试 设置(这通常
结果 无绑定 ,在 比查 输出)。
请注意,如果您在共享库(例如 libfoo.so)上运行 abicheck,
具有 而不去 用 -l LIB 标记以记录其库依赖项,然后是“未绑定
符号”问题的可能性很大。除了重建
库或检查使用该库的应用程序二进制文件并使用 -l 选项
阿比检查。
退出 状态
返回以下退出值:
0 没有错误,也没有发现问题。
1 发生了致命错误。
2 没有发生致命错误,但一些二进制文件检测到问题。
附注
只检查 ELF 对象。
在 -s -S -d 和 -O dbfiles '#' 字符以通常的方式开始一个注释行。
除非使用通过提供的“::”自定义匹配 -p or -e 标志,abicheck 可以
仅检查应用了符号版本控制的系统库(即
为库本身中的每个符号记录的私人和/或不断发展的信息)。
有关符号版本控制的详细信息,请参阅“Solaris 链接器和库指南”
网址上的答疑书 http://docs.sun.com/ab2/coll.45.13 和命令/版本脚本
GNU 链接器“ld”信息页面的部分。
默认符号版本名称匹配模式是不区分大小写的匹配
字符串 "private" 和 "evolving" 分别用于私有和演化案例。
包含单引号字符或换行符的奇数文件名将被跳过; 这样的
字符会干扰通过 shell 调用命令。
递归目录使用 发现(1) 并将输出收集到一个文件中以供使用
此 -f 选项,或在管道中通过:
找到... | abicheck -f - ...
使用 onworks.net 服务在线使用 abicheck