Как можно убедиться, что исходный код некоторой библиотеки c (.a) использует глобальные переменные или нет? Есть ли какой-нибудь инструмент, который может разбирать такие детали?Глобальные переменные в библиотеке c
ответ
Библиотека состоит из модулей (скомпилированных файлов C). Модуль может объявлять глобальную переменную. Любой модуль (внутри или вне библиотеки), ссылающийся на глобальную переменную, заставит модуль, объявляющий глобальную переменную, быть включенным в вашу сборку.
Глобальной переменной может быть static
. Затем он отображается только в этом модуле.
Глобальная переменная может быть extern
. Это означает, что он не существует в текущем модуле и вообще не может существовать в библиотеке, и в этом случае пользователь должен предоставить переменную.
В первом и третьем случаях переменная будет указана в таблице символов библиотеки или в таблице исправлений библиотеки. Первый - список символов, доступных для вызываемого абонента; второй - список переменных, чей точный адрес должен быть зафиксирован во время загрузки. Могут быть переменные, которые должны быть скопированы, которые не экспортируются. Символы всегда включают имя, исправления не нужно указывать с их именем.
Таким образом, инструмент для просмотра таблицы символов библиотеки, вероятно, может ответить на ваш вопрос.
Примечание: факт, что глобальная переменная указана в таблице символов библиотеки, не означает, что переменная используется любой функцией в библиотеке.
Рукой:
В случае, если вы уже знали, как открыть файл .a, посмотрите на него.
Если в файле есть:
переменная используется без объявления (так он определен в другом файле)
переменная объявлена вне всякой функции
Таким образом, этот файл содержит глобальную переменную.
По инструменту:
Каждый компилятор имеет этот вариант для вас (я считаю)
Например:
С GCC, с помощью GDB, тип info variables
перечислить все глобальные переменные.
С VS, откройте класса View, найти глобальных функций и переменных
- 1. Вы определяете глобальные переменные в библиотеке C?
- 2. Статические/глобальные переменные в общей библиотеке в языке C
- 3. Глобальные переменные в C++
- 4. Глобальные переменные в C
- 5. глобальные переменные в C++
- 6. Глобальные переменные в C#
- 7. глобальные переменные в C++
- 8. Глобальные переменные Класс C++
- 9. C# - Winforms - Глобальные переменные
- 10. Глобальные переменные, C++
- 11. Глобальные переменные в библиотеке, которые связаны несколькими объектами одного процесса
- 12. Глобальные переменные в современном C++
- 13. Динамические глобальные переменные в C
- 14. Глобальные переменные в Visual C#
- 15. Глобальные переменные в объекте C
- 16. общие глобальные переменные в C
- 17. c - глобальные переменные в pthreads
- 18. Глобальные переменные в C# .net
- 19. Глобальные переменные в Objective-C
- 20. Глобальные переменные в visual C++
- 21. Глобальные глобальные переменные Django
- 22. dlopen и глобальные переменные в C/C++
- 23. c глобальные переменные в объекте c
- 24. Глобальные переменные в библиотеке скриптов SSJS не работают должным образом
- 25. Desktop Application C# Глобальные переменные
- 26. Глобальные переменные Metro App C#
- 27. C++: невозможно изменить глобальные переменные
- 28. Глобальные ресурсы в библиотеке классов
- 29. Глобальные переменные?
- 30. Как статические переменные, так и глобальные переменные отображают разные адреса в динамической библиотеке и статической библиотеке в Linux?
Вы можете использовать 'nm' команду, в которой перечислены все символы и говорит, если они являются локальными или глобальными, код или данные. –
Проверьте, не превышает ли раздел данных вашего исполняемого изображения ** с библиотекой **, чем без него (вам придется маскировать в своем коде функции, которые используют библиотеку, если на то пошло). –