英語フランス語スペイン語

Ad


OnWorksファビコン

abidiff - クラウドでオンライン

Ubuntu Online、Fedora Online、Windowsオンラインエミュレーター、またはMACOSオンラインエミュレーターを介してOnWorks無料ホスティングプロバイダーでabidiffを実行します

これは、Ubuntu Online、Fedora Online、Windowsオンラインエミュレーター、MACOSオンラインエミュレーターなどの複数の無料オンラインワークステーションのXNUMXつを使用してOnWorks無料ホスティングプロバイダーで実行できるコマンドアビディフです。

プログラム:

NAME


abidiff - ELF ファイルの ABI を比較する

abidiff は、XNUMX つの共有ライブラリのアプリケーション バイナリ インターフェイス (ABI) を比較します。 ELF
フォーマット。 XNUMX つの ABI の違いを説明する意味のあるレポートを発行します。

関数と変数に関する変更を含む包括的な ABI 変更レポートの場合
サブタイプ、XNUMX つの入力共有ライブラリにはデバッグ情報が付随している必要があります
in DWARF フォーマット。 それ以外の場合のみ ELF 追加または削除されたシンボルが報告されます。

呼び出し


abidiff [オプション]

OPTIONS


· - 助けて | -h

コマンドに関する短いヘルプを表示して終了します。

· - バージョン | -v

プログラムのバージョンを表示して終了します。

· --デバッグ情報ディレクトリ1 | --d1 <ディパス1>

デバッグ情報が表示される場合については、 最初の共有ライブラリ に分割されます
別のファイル、伝えます アビディフ その個別のデバッグ情報ファイルの場所。

注意してください ディパス デバッグ情報があるルート ディレクトリを指している必要があります。
ツリー状に配置されています。 Red Hat ベースのシステムでは、そのディレクトリは
通常 /usr/lib/debug.

このオプションは、によってインストールされる分割デバッグ情報には必須ではないことにも注意してください。
システムのパッケージマネージャー アビディフ それを見つける場所を知っています。

· --デバッグ情報ディレクトリ2 | --d2 <ディパス2>

いいね --デバッグ情報ディレクトリ1、このオプションは言う アビディフ 分割デバッグの場所
の情報 XNUMX 番目の共有ライブラリ ファイルにソフトウェアを指定する必要があります。

· --stat

詳細な ABI の違いを表示するのではなく、 最初の共有ライブラリ &
XNUMX 番目の共有ライブラリ、これらの違いに関する要約統計を表示するだけです。

· --symtabs

のシンボル テーブルのみを表示します。 最初の共有ライブラリ & XNUMX 番目の共有ライブラリ.

· --削除された-fns

結果のレポートでは、 最初の共有ライブラリ &
XNUMX 番目の共有ライブラリ、削除されたグローバルに定義された関数のみを表示します
から 最初の共有ライブラリ.

· -- 変更された fns

結果のレポートでは、 最初の共有ライブラリ &
XNUMX 番目の共有ライブラリ、グローバル関数のサブタイプの変更のみを表示します
で定義された 最初の共有ライブラリ.

· --追加された-fns

結果のレポートでは、 最初の共有ライブラリ &
XNUMX 番目の共有ライブラリに追加されたグローバルに定義された関数のみを表示します。
XNUMX 番目の共有ライブラリ.

· --deleted-vars

結果のレポートでは、 最初の共有ライブラリ &
XNUMX 番目の共有ライブラリ、削除されたグローバルに定義された変数のみを表示します
から 最初の共有ライブラリ.

· --変更された変数

結果のレポートでは、 最初の共有ライブラリ &
XNUMX 番目の共有ライブラリ、グローバルのサブタイプの変更のみを表示します
で定義された変数 最初の共有ライブラリ

· --追加された変数

結果のレポートでは、 最初の共有ライブラリ &
XNUMX 番目の共有ライブラリに追加 (定義) されたグローバル変数のみを表示します。
XNUMX 番目の共有ライブラリ.

· --リンケージ名なし

結果のレポートには、追加、削除、または追加されたリンクの名前は表示されません。
関数または変数が変更されました。

· --no-show-locs
の場所に関する情報を表示しないでください。 2番目の shared ライブラリ それぞれ
タイプが変更されました。

· --非参照記号なし

結果のレポートでは、機能に関する変更情報を表示しません。
デバッグ情報によって参照されていない変数シンボル。 注意してください
これらのシンボルはデバッグ情報によって参照されず、変更情報
追加または削除されたシンボルが表示されます。

· --抑制 | --補足 <抑制への道>

次の場所にある抑制仕様ファイルを使用します。 抑制への道。 これに注意してください
オプションはコマンドラインに複数回指定できます。 すべての抑圧
その後、仕様ファイルが考慮されます。

· - 落とす <正規表現>

を読んでいると、 最初の共有ライブラリ & XNUMX 番目の共有ライブラリ ELF 入力ファイル、ドロップ
正規表現と名前が一致する、グローバルに定義された関数と変数
正規表現. その結果、これらの関数または変数に関連する変更は発行されません。
差分レポートで。

· --drop-fn <正規表現>

を読んでいると、 最初の共有ライブラリ & XNUMX 番目の共有ライブラリ ELF 入力ファイル、ドロップ
名前が正規表現に一致するグローバルに定義された関数 正規表現。 として
その結果、これらの関数に関連する変更は差分レポートに出力されません。

· --drop-var <正規表現>

を読んでいると、 最初の共有ライブラリ & XNUMX 番目の共有ライブラリ ELF 入力ファイル、ドロップ
正規表現に一致するグローバルに定義された変数 正規表現.

· - 保つ <正規表現>

を読んでいると、 最初の共有ライブラリ & XNUMX 番目の共有ライブラリ ELF 入力ファイル、保持
名前が正規表現に一致する、グローバルに定義された関数と変数
正規表現. 他のすべての関数と変数はフロアにドロップされるため、
結果の差分レポートに表示されます。

· --keep-fn <正規表現>

を読んでいると、 最初の共有ライブラリ & XNUMX 番目の共有ライブラリ ELF 入力ファイル、保持
名前が正規表現に一致するグローバルに定義された関数 正規表現。 すべて
他の関数は床にドロップされるため、結果として表示されません
差分レポート。

· --keep-var <正規表現>

を読んでいると、 最初の共有ライブラリ & XNUMX 番目の共有ライブラリ ELF 入力ファイル、保持
正規表現に一致するグローバルに定義された名前 正規表現。 他のすべて
変数は床にドロップされるため、結果の差分には表示されません
レポート。

· --無害

差分レポートでは、無害な変更のみを表示します。 デフォルトでは、無害
変更は差分レポートから除外されます 乱雑さを最小限に抑え、
実際の ABI の問題を特定するための大きな変更。

· --無害

差分レポートでは、有害な変更を表示しないでください。 デフォルトでは、有害な
変更は差分レポートに表示されます。

· --冗長

差分レポートで、冗長な変更を表示します。 冗長な変更は変更です
レポートの別の場所に表示されています。

· --冗長性なし

差分レポートで、 NOT 冗長な変更を表示します。 冗長な変更は変更です
レポートの別の場所に表示されています。 このオプションは、
デフォルト。

· --アーキテクチャなし

ABI を比較するときは、アーキテクチャを考慮しないでください。

· --ダンプ差分ツリー
差分レポートの後に、によって使用される差分ノード ツリーのテキスト表現を出力します。
変更された関数と変数を表す比較エンジン。 それか
表現は、デバッグ目的でエラー出力に出力されます。 ご了承ください
この差分ツリーは、何らかのサブタイプを持つ関数と変数にのみ関連します
変化します。 追加または削除された関数と変数には差分ノード ツリーがありません
それらに関連付けられています。

· -統計

内部のさまざまな事柄に関する統計を出力します。

· -詳細

さまざまな内部処理の進行状況に関する詳細なログを出力します。

リターン VALUES


の終了コード アビディフ command は、比較されるバイナリの ABI の場合は 0 です。
等しいか、異なる場合、またはツールでエラーが発生した場合は非ゼロになります。

後者の場合、終了コードは 8 ビット幅のビット フィールドであり、各ビットには
具体的な意味。

名前付きの値 1 の最初のビット ABIDIFF_ERROR エラーがあったことを意味します。

名前付きの値 2 の XNUMX 番目のビット ABIDIFF_USAGE_ERROR 途中でエラーが発生したことを意味します
ユーザーがツールを呼び出しました。 たとえば、ユーザーがツールを呼び出した場合に設定される可能性があります
不明なコマンド ライン スイッチ、間違った番号または引数など。このビットが
設定し、次に ABIDIFF_ERROR ビットも設定する必要があります。

値 4 の XNUMX 番目のビット、名前付き ABIDIFF_ABI_CHANGE バイナリの ABI が
比べて違います。

値 8 の XNUMX 番目のビット、名前付き ABIDIFF_ABI_INCOMPATIBLE_CHANGE のABIを意味します
比較されるバイナリは、互換性のない方法で異なります。 このビットが設定されている場合、
ABIDIFF_ABI_CHANGE ビットも設定する必要があります。 もし ABIDIFF_ABI_CHANGE が設定され、
ABIDIFF_INCOMPATIBLE_CHANGE is NOT 設定されている場合、比較される ABI が
または対応していない可能性があります。 その場合、人間が ABI の変更を確認する必要があります。
互換性があるかどうかを判断します。

残りのビットは当面使用されません。

USAGE


1. 関数のサブタイプの変更の検出:

$ cat -n テスト-v0.cc
1 // これを次のようにコンパイルします。
2 // g++ -g -Wall -shared -o libtest-v0.so test-v0.cc
3
4 構造体 S0
5{
6 int m0;
7};
8
9 ボイド
10 foo(S0* /*パラメータ名*/)
11{
12 // parameter_name で何かを行います。
13}
$
$ cat -n テスト-v1.cc
1 // これを次のようにコンパイルします。
2 // g++ -g -Wall -shared -o libtest-v1.so test-v1.cc
3
4 構造体 type_base
5{
6 int 挿入;
7};
8
9 構造体 S0 : public type_base
10{
11 int m0;
12};
13
14 ボイド
15 foo(S0* /*パラメータ名*/)
16{
17 // parameter_name で何かを行います。
18}
$
$ g++ -g -Wall -shared -o libtest-v0.so test-v0.cc
$ g++ -g -Wall -shared -o libtest-v1.so test-v1.cc
$
$ ../build/tools/abidiff libtest-v0.so libtest-v1.so
機能変更の概要: 0 削除、1 変更、0 機能追加
変数の変更の概要: 0 個の削除、0 個の変更、0 個の変数の追加

間接的なサブタイプの変更を伴う 1 つの関数:

[C]'function void foo(S0*)' には、いくつかの間接的なサブタイプの変更があります。
タイプ 'S0*' のパラメータ 0 には、サブタイプの変更があります:
タイプ「struct S0」を指している:
サイズが 32 ビットから 64 ビットに変更されました
1 つの基本クラスの挿入:
構造体 type_base
1 データ メンバーの変更:
'int S0::m0' オフセットが 0 から 32 に変更されました
$

2. 関数のサブタイプの別の変更の検出:

$ cat -n テスト-v0.cc
1 // これを次のようにコンパイルします。
2 // g++ -g -Wall -shared -o libtest-v0.so test-v0.cc
3
4 構造体 S0
5{
6 int m0;
7};
8
9 ボイド
10 foo(S0& /*パラメータ名*/)
11{
12 // parameter_name で何かを行います。
13}
$
$ cat -n テスト-v1.cc
1 // これを次のようにコンパイルします。
2 // g++ -g -Wall -shared -o libtest-v1.so test-v1.cc
3
4 構造体 S0
5{
6文字のinsert_member;
7 int m0;
8};
9
10 ボイド
11 foo(S0& /*パラメータ名*/)
12{
13 // parameter_name で何かを行います。
14}
$
$ g++ -g -Wall -shared -o libtest-v0.so test-v0.cc
$ g++ -g -Wall -shared -o libtest-v1.so test-v1.cc
$
$ ../build/tools/abidiff libtest-v0.so libtest-v1.so
機能変更の概要: 0 削除、1 変更、0 機能追加
変数の変更の概要: 0 個の削除、0 個の変更、0 個の変数の追加

間接的なサブタイプの変更を伴う 1 つの関数:

[C]'function void foo(S0&)' には、いくつかの間接的なサブタイプの変更があります。
タイプ 'S0&' のパラメータ 0 には、サブタイプの変更があります:
参照型 '構造体 S0':
サイズが 32 ビットから 64 ビットに変更されました
1 データ メンバーの挿入:
'char S0::inserted_member'、オフセット 0 (ビット単位)
1 データ メンバーの変更:
'int S0::m0' オフセットが 0 から 32 に変更されました

$

3. 関数がライブラリーから削除または追加されたことを検出する:

$ cat -n テスト-v0.cc
1 // これを次のようにコンパイルします。
2 // g++ -g -Wall -shared -o libtest-v0.so test-v0.cc
3
4 構造体 S0
5{
6 int m0;
7};
8
9 ボイド
10 foo(S0& /*パラメータ名*/)
11{
12 // parameter_name で何かを行います。
13}
$
$ cat -n テスト-v1.cc
1 // これを次のようにコンパイルします。
2 // g++ -g -Wall -shared -o libtest-v1.so test-v1.cc
3
4 構造体 S0
5{
6文字のinsert_member;
7 int m0;
8};
9
10 ボイド
11 bar(S0& /*パラメータ名*/)
12{
13 // parameter_name で何かを行います。
14}
$
$ g++ -g -Wall -shared -o libtest-v0.so test-v0.cc
$ g++ -g -Wall -shared -o libtest-v1.so test-v1.cc
$
$ ../build/tools/abidiff libtest-v0.so libtest-v1.so
機能変更の概要: 1 削除、0 変更、1 追加機能
変数の変更の概要: 0 個の削除、0 個の変更、0 個の変数の追加

1 削除された機能:
'function void foo(S0&)' {_Z3fooR2S0}

1 追加機能:
'関数ボイドバー(S0&)' {_Z3barR2S0}

$

onworks.net サービスを使用して abidiff オンラインを使用する


無料のサーバーとワークステーション

Windows と Linux のアプリをダウンロード

Linuxコマンド

Ad