Это команда abidiff, которую можно запустить в бесплатном хостинг-провайдере OnWorks, используя одну из наших многочисленных бесплатных онлайн-рабочих станций, таких как Ubuntu Online, Fedora Online, онлайн-эмулятор Windows или онлайн-эмулятор MAC OS.
ПРОГРАММА:
ИМЯ
abidiff - сравнить ABI файлов ELF
abidiff сравнивает двоичные интерфейсы приложений (ABI) двух разделяемых библиотек в ELF
формат. Он генерирует содержательный отчет, описывающий различия между двумя ABI.
Для получения подробного отчета об изменениях ABI, который включает изменения функций и переменных.
подтипы, две входные разделяемые библиотеки должны сопровождаться их отладочной информацией
in DWARF формат. В противном случае только ELF сообщаются символы, которые были добавлены или удалены.
ПРИЗЫВ
abidiff [параметры]
ДОПОЛНИТЕЛЬНЫЕ УСЛУГИ, НЕ ВКЛЮЧЕННЫЕ В ПАКЕТ
· --Помогите | -h
Вывести краткую справку о команде и выйти.
· --версия | -v
Вывести версию программы и выйти.
· --debug-info-dir1 | --d1 <ди-путь1>
Для случаев, когда отладочная информация для первая разделяемая библиотека разделен на
отдельный файл, сообщает соблюдать где найти этот отдельный файл с отладочной информацией.
Обратите внимание, что ди-путь должен указывать на корневой каталог, в котором отладочная информация
оформлен в виде дерева. В системах на базе Red Hat этот каталог
обычно / usr / lib / отладка.
Также обратите внимание, что этот параметр не является обязательным для разделенной отладочной информации, установленной
менеджер пакетов вашей системы, потому что тогда соблюдать знает, где это найти.
· --debug-info-dir2 | --d2 <ди-путь2>
Подобно --debug-info-dir1, эта опция сообщает соблюдать где найти разделенную отладку
информация для вторая общая библиотека .
· --stat
Вместо того, чтобы отображать подробные различия ABI между первая разделяемая библиотека и
вторая общая библиотека, просто выведите краткую сводную статистику об этих различиях.
· --symtabs
Отображать только таблицы символов первая разделяемая библиотека и вторая общая библиотека.
· --deleted-fns
В полученном отчете о различиях между первая разделяемая библиотека и
вторая общая библиотека, отображать только глобально определенные функции, которые были удалены
от первая разделяемая библиотека.
· --changed-fns
В полученном отчете о различиях между первая разделяемая библиотека и
вторая общая библиотека, отображать только изменения в подтипах глобальных функций
определяется в первая разделяемая библиотека.
· --добавлено-fns
В полученном отчете о различиях между первая разделяемая библиотека и
вторая общая библиотека, отображать только глобально определенные функции, которые были добавлены в
вторая общая библиотека.
· --deleted-варс
В полученном отчете о различиях между первая разделяемая библиотека и
вторая общая библиотека, отображать только глобально определенные переменные, которые были удалены
от первая разделяемая библиотека.
· --changed-vars
В полученном отчете о различиях между первая разделяемая библиотека и
вторая общая библиотека, отображать только изменения в подтипах глобального
переменные, определенные в первая разделяемая библиотека
· --добавленные-вары
В полученном отчете о различиях между первая разделяемая библиотека и
вторая общая библиотека, отображать только те глобальные переменные, которые были добавлены (определены) в
вторая общая библиотека.
· --no-linkage-имя
В итоговом отчете не отображайте имена связей добавленных, удаленных или
измененные функции или переменные.
· --no-show-locs
Не показывать информацию о том, где в второй общие библиотека соответствующие
тип был изменен.
· --no-unreferenced-символы
В итоговом отчете не отображать информацию об изменении функции и
символы переменных, на которые не ссылается никакая отладочная информация. Обратите внимание, что для
эти символы не упоминаются в какой-либо отладочной информации, информация об изменении
отображаются добавленные или удаленные символы.
· - подавления | --суппр <путь к подавлению>
Используйте файл спецификации подавления, расположенный по адресу путь к подавлению. Обратите внимание, что это
опция может появляться в командной строке несколько раз; все подавление
затем учитываются файлы спецификаций.
· --уронить <регулярное выражение>
При чтении первая разделяемая библиотека и вторая общая библиотека Входные файлы ELF, drop
глобально определенные функции и переменные, имена которых соответствуют регулярному выражению
регулярное выражение. В результате никаких изменений, связанных с этими функциями или переменными, не будет.
в отчете о различиях.
· --drop-fn <регулярное выражение>
При чтении первая разделяемая библиотека и вторая общая библиотека Входные файлы ELF, drop
глобально определенные функции, имена которых соответствуют регулярному выражению регулярное выражение, Как
В результате в отчет о различиях не будет внесено никаких изменений, связанных с этими функциями.
· --drop-вар <регулярное выражение>
При чтении первая разделяемая библиотека и вторая общая библиотека Входные файлы ELF, drop
глобально определенные переменные, соответствующие регулярному выражению регулярное выражение.
· --хранить <регулярное выражение>
При чтении первая разделяемая библиотека и вторая общая библиотека Входные файлы ELF, оставить
глобально определенные функции и переменные, имена которых соответствуют регулярному выражению
регулярное выражение. Все остальные функции и переменные падают на пол и поэтому не будут
появятся в итоговом отчете о различиях.
· --keep-фн <регулярное выражение>
При чтении первая разделяемая библиотека и вторая общая библиотека Входные файлы ELF, оставить
глобально определенные функции, имена которых соответствуют регулярному выражению регулярное выражение. Все
другие функции падают на пол и поэтому не отображаются в
отчет о различиях.
· --keep-вар <регулярное выражение>
При чтении первая разделяемая библиотека и вторая общая библиотека Входные файлы ELF, оставить
глобально определенные имена, соответствующие регулярному выражению регулярное выражение, Все остальные
переменные сбрасываются на пол и поэтому не будут отображаться в результирующем различии
сообщить.
· - безвредный
В отчете о различиях отображать только безобидные изменения. По умолчанию безобидный
изменения фильтруются из отчета о различиях, сводят беспорядок к минимуму и имеют
большие изменения для выявления реальных проблем с ABI.
· - безвредный
В отчете о различиях не отображайте вредные изменения. По умолчанию только вредоносные
изменения отображаются в отчете о различиях.
· --избыточный
В отчете о различиях отображайте повторяющиеся изменения. Избыточное изменение - это изменение
который был отображен в другом месте отчета.
· - без избыточности
В отчете о различиях сделайте НЕ отображать повторяющиеся изменения. Избыточное изменение - это изменение
который был отображен в другом месте отчета. Эта опция включена
по умолчанию.
· - без архитектуры
Не принимайте во внимание архитектуру при сравнении ABI.
· --dump-diff-дерево
После отчета о различиях испустите текстовое представление дерева узлов различий, используемого
механизм сравнения для представления измененных функций и переменных. Что
представление отправляется на вывод ошибки для целей отладки. Обратите внимание, что
это дерево различий относится только к функциям и переменным, которые имеют подтип
изменения. Добавленные или удаленные функции и переменные не имеют дерева узлов различий
связанные с ними.
· --статистика
Выдавайте статистику о различных внутренних вещах.
· --подробный
Создавайте подробные журналы о ходе выполнения различных внутренних задач.
ВЕРНУТЬ ЦЕННОСТИ:
Код выхода из соблюдать команда либо 0, если ABI сравниваемых двоичных файлов
равны или не равны нулю, если они различаются или инструмент обнаружил ошибку.
В последнем случае код выхода представляет собой битовое поле шириной 8 бит, в котором каждый бит имеет
конкретное значение.
Первый бит, имеющий значение 1, назван ABIDIF_ERROR означает, что произошла ошибка.
Второй бит, имеющий значение 2, назван ABIDIFF_USAGE_ERROR означает, что в пути произошла ошибка
пользователь вызвал инструмент. Это может быть установлено, например, если пользователь вызвал инструмент
с неизвестным переключателем командной строки, с неправильным номером или аргументом и т. д. Если этот бит
установить, затем ABIDIF_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 test-v0.cc
1 // Скомпилируйте это с помощью:
2 // g ++ -g -Wall -shared -o libtest-v0.so test-v0.cc
3
4 структура S0
5 {
6 инт м0;
7};
8
9 недействительно
10 foo (S0 * / * имя_параметра * /)
11 {
12 // делаем что-нибудь с параметром имя_параметра.
13}
$
$ кошка -n test-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: общедоступная база_типа
10 {
11 инт м0;
12};
13
14 недействительно
15 foo (S0 * / * имя_параметра * /)
16 {
17 // делаем что-нибудь с параметром имя_параметра.
18}
$
$ g ++ -g -Wall -shared -o libtest-v0.so test-v0.cc
$ g ++ -g -Wall -shared -o libtest-v1.so test-v1.cc
$
$ ../сборка/инструменты/abidiff libtest-v0.so libtest-v1.so
Сводка изменений функций: 0 удалено, 1 изменено, 0 добавлена функция
Сводка изменений переменных: 0 удалено, 0 изменено, 0 добавлена переменная
1 функция с некоторым косвенным изменением подтипа:
[C] 'function void foo (S0 *)' имеет некоторые косвенные изменения подтипа:
параметр 0 типа 'S0 *' имеет изменения подтипа:
в указывает на тип 'struct S0':
размер изменен с 32 до 64 бит
1 вставка базового класса:
структура type_base
1 изменение элемента данных:
Смещение int S0 :: m0 изменено с 0 на 32
$
2. Обнаружение другого изменения в подтипе функции:
$ кошка -n test-v0.cc
1 // Скомпилируйте это с помощью:
2 // g ++ -g -Wall -shared -o libtest-v0.so test-v0.cc
3
4 структура S0
5 {
6 инт м0;
7};
8
9 недействительно
10 foo (S0 & / * имя_параметра * /)
11 {
12 // делаем что-нибудь с параметром имя_параметра.
13}
$
$ кошка -n test-v1.cc
1 // Скомпилируйте это с помощью:
2 // g ++ -g -Wall -shared -o libtest-v1.so test-v1.cc
3
4 структура S0
5 {
6 символов Insert_member;
7 инт м0;
8};
9
10 недействительно
11 foo (S0 & / * имя_параметра * /)
12 {
13 // делаем что-нибудь с параметром имя_параметра.
14}
$
$ g ++ -g -Wall -shared -o libtest-v0.so test-v0.cc
$ g ++ -g -Wall -shared -o libtest-v1.so test-v1.cc
$
$ ../сборка/инструменты/abidiff libtest-v0.so libtest-v1.so
Сводка изменений функций: 0 удалено, 1 изменено, 0 добавлена функция
Сводка изменений переменных: 0 удалено, 0 изменено, 0 добавлена переменная
1 функция с некоторым косвенным изменением подтипа:
[C] 'function void foo (S0 &)' имеет некоторые косвенные изменения подтипа:
параметр 0 типа 'S0 &' имеет изменения подтипа:
в ссылочном типе 'struct S0':
размер изменен с 32 до 64 бит
Вставка 1 элемента данных:
'char S0 :: Insert_member' со смещением 0 (в битах)
1 изменение элемента данных:
Смещение int S0 :: m0 изменено с 0 на 32
$
3. Обнаружение того, что функции были удалены или добавлены в библиотеку:
$ кошка -n test-v0.cc
1 // Скомпилируйте это с помощью:
2 // g ++ -g -Wall -shared -o libtest-v0.so test-v0.cc
3
4 структура S0
5 {
6 инт м0;
7};
8
9 недействительно
10 foo (S0 & / * имя_параметра * /)
11 {
12 // делаем что-нибудь с параметром имя_параметра.
13}
$
$ кошка -n test-v1.cc
1 // Скомпилируйте это с помощью:
2 // g ++ -g -Wall -shared -o libtest-v1.so test-v1.cc
3
4 структура S0
5 {
6 символов Insert_member;
7 инт м0;
8};
9
10 недействительно
11 бар (S0 & / * имя_параметра * /)
12 {
13 // делаем что-нибудь с параметром имя_параметра.
14}
$
$ g ++ -g -Wall -shared -o libtest-v0.so test-v0.cc
$ g ++ -g -Wall -shared -o libtest-v1.so test-v1.cc
$
$ ../сборка/инструменты/abidiff libtest-v0.so libtest-v1.so
Сводка изменений функций: 1 удалено, 0 изменено, 1 добавлено функций
Сводка изменений переменных: 0 удалено, 0 изменено, 0 добавлена переменная
1 Удаленная функция:
'function void foo (S0 &)' {_Z3fooR2S0}
1 Добавленная функция:
'function void bar (S0 &)' {_Z3barR2S0}
$
Используйте abidiff онлайн с помощью сервисов onworks.net