abidiff - 클라우드의 온라인

이것은 Ubuntu Online, Fedora Online, Windows 온라인 에뮬레이터 또는 MAC OS 온라인 에뮬레이터와 같은 여러 무료 온라인 워크스테이션 중 하나를 사용하여 OnWorks 무료 호스팅 제공업체에서 실행할 수 있는 명령 abidiff입니다.

프로그램:

이름


abidiff - ELF 파일의 ABI 비교

abidiff는 두 공유 라이브러리의 ABI(Application Binary Interface)를 비교합니다. 꼬마 요정
체재. 두 ABI 간의 차이점을 설명하는 의미 있는 보고서를 내보냅니다.

기능 및 변수에 대한 변경 사항을 포함하는 포괄적인 ABI 변경 보고서
하위 유형, 두 개의 입력 공유 라이브러리는 디버그 정보와 함께 제공되어야 합니다.
in 난쟁이 체재. 그렇지 않으면 만 꼬마 요정 추가 또는 제거된 기호가 보고됩니다.

기도


비디프 [옵션]

옵션


· --도움 | -h

명령에 대한 간단한 도움말을 표시하고 종료합니다.

· --번역 | -v

프로그램 버전을 표시하고 종료합니다.

· --디버그-정보-dir1 | --d1 <이중 경로1>

에 대한 디버그 정보가 있는 경우 첫 번째 공유 라이브러리 로 나뉩니다.
별도의 파일, 알려줍니다 아비디프 별도의 디버그 정보 파일을 찾을 수 있는 위치입니다.

참고 이중 경로 디버그 정보가 있는 루트 디렉토리를 가리켜야 합니다.
나무모양으로 배열되어 있습니다. Red Hat 기반 시스템에서 해당 디렉토리는
보통 /usr/lib/디버그.

이 옵션은 다음에 의해 설치된 분할 디버그 정보에 대해 필수가 아닙니다.
시스템의 패키지 관리자 때문에 아비디프 어디에서 찾을 수 있는지 알고 있습니다.

· --디버그-정보-dir2 | --d2 <이중 경로2>

처럼 --디버그-정보-dir1, 이 옵션은 아비디프 분할 디버그를 찾을 위치
정보 두 번째 공유 라이브러리 파일.

· --stat

자세한 ABI 차이점을 표시하는 대신 첫 번째 공유 라이브러리
두 번째 공유 라이브러리, 이러한 차이점에 대한 몇 가지 요약 통계를 표시합니다.

· --symtabs

기호 테이블만 표시 첫 번째 공유 라이브러리두 번째 공유 라이브러리.

· --삭제-fns

결과 보고서에서 첫 번째 공유 라이브러리
두 번째 공유 라이브러리, 삭제된 전역적으로 정의된 함수만 표시
첫 번째 공유 라이브러리.

· --변경-fns

결과 보고서에서 첫 번째 공유 라이브러리
두 번째 공유 라이브러리, 전역 함수의 하위 유형 변경 사항만 표시
정의 첫 번째 공유 라이브러리.

· --추가-fns

결과 보고서에서 첫 번째 공유 라이브러리
두 번째 공유 라이브러리, 추가된 전역적으로 정의된 함수만 표시
두 번째 공유 라이브러리.

· --삭제된 변수

결과 보고서에서 첫 번째 공유 라이브러리
두 번째 공유 라이브러리, 삭제된 전역적으로 정의된 변수만 표시
첫 번째 공유 라이브러리.

· --변경된 변수

결과 보고서에서 첫 번째 공유 라이브러리
두 번째 공유 라이브러리, 전역 하위 유형의 변경 사항만 표시
에 정의된 변수 첫 번째 공유 라이브러리

· --추가 변수

결과 보고서에서 첫 번째 공유 라이브러리
두 번째 공유 라이브러리, 추가(정의)된 전역 변수만 표시
두 번째 공유 라이브러리.

· --연결 이름 없음

결과 보고서에서 추가, 제거 또는
변경된 기능이나 변수.

· --no-show-locs
위치에 대한 정보를 표시하지 않음 공유 도서관 각각
유형이 변경되었습니다.

· --참조되지 않은 기호 없음

결과 보고서에는 기능 및
디버그 정보에서 참조하지 않는 변수 기호. 참고로
디버그 정보에서 참조하지 않는 이러한 기호, 변경 정보
추가되거나 제거된 기호가 표시됩니다.

· --억제 | --suppr <진압 경로>

다음 위치에 있는 억제 사양 파일 사용 진압 경로. 이
옵션은 명령줄에 여러 번 나타날 수 있습니다. 모든 억압
그런 다음 사양 파일이 고려됩니다.

· --떨어지다 <정규식>

읽을 때 첫 번째 공유 라이브러리두 번째 공유 라이브러리 ELF 입력 파일, 드롭
정규식과 이름이 일치하는 전역적으로 정의된 함수 및 변수
정규식. 결과적으로 이러한 함수 또는 변수와 관련된 변경 사항은 내보내지지 않습니다.
차이 보고서에서.

· --drop-fn <정규식>

읽을 때 첫 번째 공유 라이브러리두 번째 공유 라이브러리 ELF 입력 파일, 드롭
이름이 정규식과 일치하는 전역으로 정의된 함수 정규식. 로
결과적으로 이러한 기능과 관련된 변경 사항은 diff 보고서에서 내보내지지 않습니다.

· --drop-var <정규식>

읽을 때 첫 번째 공유 라이브러리두 번째 공유 라이브러리 ELF 입력 파일, 드롭
정규식과 일치하는 전역적으로 정의된 변수 정규식.

· --유지하다 <정규식>

읽을 때 첫 번째 공유 라이브러리두 번째 공유 라이브러리 ELF 입력 파일, 유지
이름이 정규식과 일치하는 전역적으로 정의된 함수 및 변수
정규식. 다른 모든 함수와 변수는 바닥에 떨어지므로
결과 diff 보고서에 나타납니다.

· --keep-fn <정규식>

읽을 때 첫 번째 공유 라이브러리두 번째 공유 라이브러리 ELF 입력 파일, 유지
이름이 정규식과 일치하는 전역으로 정의된 함수 정규식. 모든
다른 기능은 바닥에 떨어지므로 결과에 나타나지 않습니다.
차이 보고서.

· --keep-var <정규식>

읽을 때 첫 번째 공유 라이브러리두 번째 공유 라이브러리 ELF 입력 파일, 유지
정규식과 일치하는 이름이 전역적으로 정의됨 정규식. 그 외 모든 것들
변수는 바닥에 떨어지므로 결과 diff에 나타나지 않습니다.
보고합니다.

· --해가없는

diff 보고서에서 무해한 변경 사항만 표시합니다. 기본적으로 무해한
변경 사항은 diff 보고서에서 필터링되어 혼란을 최소화하고
실제 ABI 문제를 발견하기 위한 더 큰 변화.

· --무해

diff 보고서에서 유해한 변경 사항을 표시하지 마십시오. 기본적으로 유해한 항목만
변경 사항은 diff 보고서에 표시됩니다.

· --불필요한

diff 보고서에서 중복 변경 사항을 표시하십시오. 중복된 변경은 변경입니다.
보고서의 다른 곳에 표시되었습니다.

· --중복 없음

diff 보고서에서 다음을 수행하십시오. 않습니다. 중복 변경을 표시합니다. 중복된 변경은 변경입니다.
보고서의 다른 곳에 표시되었습니다. 이 옵션은 다음에 의해 켜집니다.
태만.

· --아키텍처 없음

ABI를 비교할 때 아키텍처를 고려하지 마십시오.

· --덤프-차이-트리
diff 보고서 후에 다음에서 사용하는 diff 노드 트리의 텍스트 표현을 내보냅니다.
변경된 기능과 변수를 나타내는 비교 엔진. 저것
표현은 디버깅 목적으로 오류 출력으로 내보내집니다. 참고
이 diff 트리는 일부 하위 유형이 있는 함수 및 변수에만 관련이 있습니다.
변경. 추가되거나 제거된 함수 및 변수에는 diff 노드 트리가 없습니다.
그들과 관련된.

· --통계

다양한 내부 사물에 대한 통계를 내보냅니다.

· --말 수가 많은

기타 내부 사항의 진행 상황에 대한 자세한 로그를 내보냅니다.

RETURN Values


종료 코드 아비디프 명령은 비교되는 바이너리의 ABI인 경우 0입니다.
동일하거나 다르거나 도구에 오류가 발생한 경우 XNUMX이 아닙니다.

후자의 경우 종료 코드는 각 비트에
구체적인 의미.

값이 1인 첫 번째 비트는 ABIDIFF_ERROR 오류가 있음을 의미합니다.

값 2의 두 번째 비트는 다음과 같이 명명됩니다. ABIDIFF_USAGE_ERROR 방법에 오류가 있음을 의미합니다.
사용자가 도구를 호출했습니다. 예를 들어 사용자가 도구를 호출한 경우 설정될 수 있습니다.
알 수 없는 명령줄 스위치, 잘못된 번호 또는 인수 등으로 이 비트가
설정한 다음 ABIDIFF_ERROR 비트도 설정해야 합니다.

값 4의 세 번째 비트는 다음과 같습니다. ABIDIFF_ABI_CHANGE 바이너리의 ABI를 의미합니다.
비교하면 다릅니다.

값 8의 네 번째 비트는 다음과 같이 명명됩니다. ABIDIFF_ABI_INCOMPATIBLE_CHANGE 의 ABI를 의미합니다.
비교되는 바이너리는 호환되지 않는 방식으로 다릅니다. 이 비트가 설정되면
ABIDIFF_ABI_CHANGE 비트도 설정해야 합니다. 만약 ABIDIFF_ABI_CHANGE 설정되고
ABIDIFF_INCOMPATIBLE_CHANGE is 않습니다. 설정하면 비교되는 ABI가
또는 호환되지 않을 수 있습니다. 이 경우 인간은 ABI 변경 사항을 검토해야 합니다.
호환되는지 여부를 결정합니다.

나머지 비트는 현재 사용되지 않습니다.

사용법 사용 예


1. 함수의 하위 유형 변경 감지:

$ 고양이 -n 테스트-v0.cc
1 // 다음과 같이 컴파일합니다.
2 // g++ -g -벽 -공유 -o libtest-v0.so 테스트-v0.cc
3
4 구조체 S0
삼 {
6 정수 m0;
7};
8
9 무효
10 foo(S0* /*매개변수 이름*/)
삼 {
12 // parameter_name으로 작업을 수행합니다.
13}
$
$ 고양이 -n 테스트-v1.cc
1 // 다음과 같이 컴파일합니다.
2 // g++ -g -벽 -공유 -o libtest-v1.so 테스트-v1.cc
3
4 구조체 type_base
삼 {
6 int가 삽입되었습니다.
7};
8
9 구조체 S0 : 공개 type_base
삼 {
11 정수 m0;
12};
13
14 무효
15 foo(S0* /*매개변수 이름*/)
삼 {
17 // parameter_name으로 작업을 수행합니다.
18}
$
$ g++ -g -벽 -공유 -o libtest-v0.so 테스트-v0.cc
$ g++ -g -벽 -공유 -o libtest-v1.so 테스트-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. 함수의 하위 유형에서 다른 변경 감지:

$ 고양이 -n 테스트-v0.cc
1 // 다음과 같이 컴파일합니다.
2 // g++ -g -벽 -공유 -o libtest-v0.so 테스트-v0.cc
3
4 구조체 S0
삼 {
6 정수 m0;
7};
8
9 무효
10 foo(S0& /*매개변수 이름*/)
삼 {
12 // parameter_name으로 작업을 수행합니다.
13}
$
$ 고양이 -n 테스트-v1.cc
1 // 다음과 같이 컴파일합니다.
2 // g++ -g -벽 -공유 -o libtest-v1.so 테스트-v1.cc
3
4 구조체 S0
삼 {
6자 삽입_멤버;
7 정수 m0;
8};
9
10 무효
11 foo(S0& /*매개변수 이름*/)
삼 {
13 // parameter_name으로 작업을 수행합니다.
14}
$
$ g++ -g -벽 -공유 -o libtest-v0.so 테스트-v0.cc
$ g++ -g -벽 -공유 -o libtest-v1.so 테스트-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 데이터 멤버 삽입:
오프셋 0에서 'char S0::inserted_member'(비트 단위)
1 데이터 멤버 변경:
'int S0::m0' 오프셋이 0에서 32로 변경되었습니다.

$

3. 라이브러리에 제거되거나 추가된 함수 감지:

$ 고양이 -n 테스트-v0.cc
1 // 다음과 같이 컴파일합니다.
2 // g++ -g -벽 -공유 -o libtest-v0.so 테스트-v0.cc
3
4 구조체 S0
삼 {
6 정수 m0;
7};
8
9 무효
10 foo(S0& /*매개변수 이름*/)
삼 {
12 // parameter_name으로 작업을 수행합니다.
13}
$
$ 고양이 -n 테스트-v1.cc
1 // 다음과 같이 컴파일합니다.
2 // g++ -g -벽 -공유 -o libtest-v1.so 테스트-v1.cc
3
4 구조체 S0
삼 {
6자 삽입_멤버;
7 정수 m0;
8};
9
10 무효
11 bar(S0& /*parameter_name*/)
삼 {
13 // parameter_name으로 작업을 수행합니다.
14}
$
$ g++ -g -벽 -공유 -o libtest-v0.so 테스트-v0.cc
$ g++ -g -벽 -공유 -o libtest-v1.so 테스트-v1.cc
$
$ ../build/tools/abidiff libtest-v0.so libtest-v1.so
기능 변경 사항 요약: 1 제거, 0 변경, 1 추가 기능
변수 변경 요약: 0 제거됨, 0 변경됨, 0 추가된 변수

1 제거된 기능:
'함수 무효 foo(S0&)' {_Z3fooR2S0}

1 추가된 기능:
'함수 무효 바(S0&)' {_Z3barR2S0}

$

onworks.net 서비스를 사용하여 온라인에서 abidiff 사용



최신 Linux 및 Windows 온라인 프로그램