Мне нужно выделить точный набор зависимостей разделяемой библиотеки двоичной программы. Я работаю над linux, и проект написан на моем C++. Таким образом, мне нужна рекурсивная ldd-подобная функциональность на C++. Как мне это сделать?Печать общих библиографических зависимостей от C++
ответ
Чтобы процитировать Хана Соло, «у меня плохое представление об этом». Настройка chroot для дочернего процесса из C++-программы звучит как какое-то архитектурное заблуждение/отвращение дальше линии. К сожалению, готового решения на C++ не возникает. Вы могли, конечно, запустить ltrace/Трассирование/рекурсивного LDD и анализировать их выход ...
... но, вообще говоря, идея заключается в том, чтобы настроить среду CHROOT статически (то есть до того, как процессы запускаются), а не динамически. При динамическом подходе злоумышленник может обмануть основной процесс, полагая, что он должен дать ребенку процесс, который он не должен иметь в chroot. Это побеждает всю цель.
Инструменты для статически настройки до CHROOT среды для данного исполняемого файла много, инструменты для этого динамически я не мог найти. Это намек сам по себе.
В то же время я нашел следующее: linux/gcc: ldd functionality from inside a C/C++ program , где принято решение предлагает использовать:
setenv("LD_TRACE_LOADED_OBJECTS", "1", 1); FILE *ldd = popen("/lib/libz.so");
Я попробовал его и работал как с Баш и от C++ (OFC в этом случае я думаю о эквивалентная версия). Однако, если я запускал либо версии для двоичного кода SUID (что у меня есть на самом деле), тогда я получил код выхода 5 (я думаю, проблемы с разрешением).
Тогда я проследил, что LDD именно делает и следующий кажется хорошо (по крайней мере, в командной строке):
LD_TRACE_LOADED_OBJECTS=1 /lib64/ld-linux-x86-64.so.2 binary_name
The (фиктивная) вопрос: что является эквивалентом реализации этого в C++?
- 1. Совместимость библиографических зависимостей для некоммерческого использования
- 2. Получение общих зависимостей проекта Lisp от GitHub
- 3. Печать общих уровней деревьев
- 4. c печать от указателя
- 5. Использование общих классов с впрыском зависимостей с C#
- 6. Задание общих модулей и зависимостей в r.js
- 7. Построение общих зависимостей с докер-компоновать
- 8. Удалить заголовок из библиографических страниц
- 9. Python Печать общих значений в столбец
- 10. C исполняемый код независимость от общих библиотек
- 11. Расширение службы/IService для добавления общих зависимостей
- 12. печать общих элементы из двух массивов
- 13. Сканирование зависимостей DLL от исполняемого файла C#
- 14. Печать не общих элементов из двух массивов
- 15. linux не зависит от общих библиотек
- 16. Использование eval для println элементов библиографических зависимостей в SBT 0.12.x shell
- 17. Обработка общих зависимостей между взаимозависимыми модулями в Android Studio
- 18. Наследование от общих интерфейсов
- 19. Cast от общих к общим
- 20. зависимости от общих статических методов
- 21. Pandoc цитаты без добавления библиографических ссылок
- 22. VBA для получения списка требуемых библиографических ссылок
- 23. Включение зависимостей зависимостей от пружины aop sidesteps
- 24. Поиск нежелательных зависимостей кода от транзитивных зависимостей
- 25. C# Словарь общих классов
- 26. Определение функциональных зависимостей от диаграммы
- 27. Являются ли ящики общедоступными статическими переменными общих зависимостей?
- 28. Ошибка установки зависимостей от package.json
- 29. Инъекция зависимостей от затяжки
- 30. Maven зависимости от зависимостей
Erm ... если вы должны быть конкретными в отношении библиотек, почему бы не использовать статическую сборку? Жесткие кодировки динамических зависимостей неизбежно станут королевской болью, когда (а не если) наступает день, когда вы не успеваете за изменениями в сторонних библиотеках ... – DevSolar
[Рекурсивный-ldd] (http: // sourceforge. net/projects/recursive-ldd /) делает это в Perl ... – DevSolar
Ну ... Я не слишком уверен, что делать, поэтому я буду более конкретным: у меня есть программа с двумя процессами. Основной процесс и детский процесс - это то, что называется основной и запущено в chroot. Чтобы иметь возможность запускать этот дочерний процесс в chroot, его зависимости должны быть помещены в среду chroot. Но рекурсивно binding/lib,/lib64,/usr/lib и т. Д. Является нежелательным решением. Вот почему я хотел бы определить библиотеки в основном процессе и скопировать их в соответствующее место до вызова chrooted дочернего процесса. – mirage