簡體   English   中英

從C ++打印共享庫依賴項

[英]Print shared library dependencies from C++

我需要分配一個二進制程序的共享庫依賴關系的確切集合。 我正在使用linux,並且該項目是用C ++編寫的。 因此,我需要在C ++中具有類似ldd的遞歸功能。 我該怎么做?

用韓·索羅(Han Solo)的話說:“我對此感到很不好”。 從C ++程序中為子進程設置chroot聽起來像是一些架構上的誤解/搞砸了。 抱歉,沒有想到的現成C ++解決方案。 您當然可以運行ltrace / strace / recursive-ldd並解析其輸出...

...但是總的來說,我們的想法是靜態地 (即在啟動任何進程之前)而不是動態地設置chroot環境。 使用動態方法,攻擊者可能使主要進程蒙蔽以為它應該給子進程提供chroot不應該擁有的東西。 這破壞了整個目的。

為給定的可執行文件靜態設置chroot環境的工具很多,而動態地執行此操作的工具我找不到。 這本身就是一個提示。

同時,我發現了以下內容: linux / gcc:來自C / C ++程序內部的ldd功能,其中接受的答案建議使用:
setenv("LD_TRACE_LOADED_OBJECTS", "1", 1); FILE *ldd = popen("/lib/libz.so");
我試用了它,並從bash和C ++(在這種情況下,我認為是offc)都可以使用它。 但是,如果我為SUID二進制文件運行了兩個版本(實際上是我擁有的版本),那么我會得到退出代碼5(我想是權限問題)。

然后,我跟蹤了ldd的確切功能,以下內容似乎很好(至少在命令行中如此):
LD_TRACE_LOADED_OBJECTS=1 /lib64/ld-linux-x86-64.so.2 binary_name
(虛擬)問題是:在C ++中等效的實現是什么?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM