回答
令人難以置信的可能性不大,因爲通常情況下,您不會將注入庫的全部內容注入到可執行文件中。
你只得到足以滿足所有未定義的符號。這實際上可能只是圖書館的一小部分。庫通常由一組目標文件組成,其中只有那些需要的文件被鏈接到可執行文件中。例如,如果您在C運行時庫中調用的唯一東西是exit()
,那麼在可執行文件中很可能不會有printf()
函數系列。
如果你直接鏈接到目標文件,你可能會有機會,因爲無論是否使用它們(除非你的鏈接器是一個聰明的鏈接器)。
但即便如此,這也將是一項艱鉅的任務,因爲可執行文件中可能沒有關於哪些代碼段來自特定對象文件的信息。這可能是可行的,但如果還有其他方法,我會先看看。
讓我澄清一下典型的過程:
- 四個目標文件,
a.o
,b.o
,c.o
和d.o
包含的功能分別a()
,b()
,c()
和d()
。他們將全部添加到abcd.a
存檔中。 - 除了
b()
調用c()
之外,它們都是獨立的(沒有依賴關係)。 - 您有一個主程序,它調用
a()
和b()
,然後編譯它並將其與abcd.a
庫鏈接。 - 鏈接器拖動
a.o
和b.o
出庫和你的可執行文件,滿足了a()
和b()
的需要,但將需要c()
,因爲b()
需要它。 - 然後,鏈接程序將
c.o
拖出庫並放入可執行文件中,以滿足對c()
的需求。現在,所有未定義的符號都已滿足,可執行文件已完成並已粉碎,您可以在準備就緒時運行它。
在這個過程中沒有任何階段是d.o
拖入您的可執行文件,所以你沒有希望得到它。
更新:的Re 「如果有另一種方式,我會看,首先」評論我上面做,你剛纔的評論表示您所擁有的源其他的答案之一代碼,使你想要提取的庫。我需要問:爲什麼你不能用該源重建庫?這似乎比嘗試從可執行代碼的重現中重新創建庫要容易得多。
這似乎是你要求一個反編譯器。這些工具很難使用(對於溫和複雜的C++來說可能不可能),並且如果有任何其他方式來解決您的問題,包括花幾個月時間來重寫這些庫,我會推薦這種行爲方式。
就像pax指出的那樣,即使你確實使用了反編譯器,你也只能得到可執行文件調用的庫函數。
想象一下,有10本書的語言你不明白,沒有封面,標題頁,頁碼和章節。有些書可能不完整。所有的頁面都被混洗在一起,所以不可能找出每本書的開始和結尾在哪裏(每一頁都是一個函數調用)現在試着找到第5冊的第123頁(假設它是上面提到的函數Exit() )。
嗯,這是可能的...
而且您有第5本書的原稿。絕對容易從原稿中重新打印第5本書。 – 2009-11-13 15:26:12
- 1. CMake Visual Studio鏈接可執行文件與靜態庫
- 2. 靜態鏈接的可執行文件比動態鏈接的可執行文件更快嗎?
- 3. 鏈接到靜態庫來構建靜態可執行
- 4. UNIX:將可執行文件鏈接到靜態庫和動態庫?
- 5. 可疑的靜態鏈接可執行文件大小
- 6. 鏈接可執行文件中缺少靜態庫中的符號
- 7. 如何將外部庫靜態鏈接到我的可執行文件中?
- 8. 編譯「壓力ng」包的靜態鏈接可執行文件
- 9. VS2015如何將靜態庫鏈接到其他庫和可執行文件?
- 10. GDB可以使用靜態鏈接庫重新加載可執行文件嗎?
- 11. 加載鏈,靜態庫和可執行文件
- 12. 在可執行文件中找不到C++動態鏈接庫
- 13. Linux,靜態庫引用可執行文件中的其他靜態庫
- 14. 可以將.so文件靜態鏈接到可執行文件嗎?
- 15. 鏈接到Expressjs中的靜態文件中的靜態文件
- 16. Scons,僅從靜態庫構建C++可執行文件
- 17. 什麼是靜態庫,靜態鏈接動態庫和動態鏈接動態庫的.lib文件?
- 18. 在鏈接可執行文件時只指定一個靜態庫的鏈接標記
- 19. 鏈接器錯誤編譯使用Boost.Thread使用Boost.Thread鏈接到靜態庫的可執行文件
- 20. 靜態鏈接庫
- 21. 鏈接靜態庫與靜態庫
- 22. UNIX:靜態庫鏈接到靜態庫
- 23. 從c#中的可執行文件中提取文件
- 24. 在靜態鏈接的可執行文件中使用GPL許可庫的代碼?
- 25. 谷歌測試可執行文件或靜態/動態庫?
- 26. 從文本文件中提取鏈接
- 27. 獲取可執行文件中使用的靜態庫的列表
- 28. linux gcc鏈接的可執行文件缺少stat64的靜態定義
- 29. 如何在鏈接到可執行文件時強制在靜態庫中包含對象文件?
- 30. qmake:使可執行文件和靜態庫成爲可能
該方案由上有幾個自定義對象的文件,將其鏈接到一個單獨的定製庫文件,以及庫可執行文件裏面靜態鏈接。 如果所有庫都是自定義庫,那麼它們不是「完全嵌入」到可執行文件中嗎? 其實我不想得到源代碼,我只想得到庫文件。 – HyLian 2009-11-13 12:46:27
如果庫中的每個對象文件都需要滿足所有未定義的符號,那麼是的,它們都會在那裏。但事實並非如此。 – paxdiablo 2009-11-13 12:53:49
讓我們退後一步。爲什麼你沒有.sl/.a文件? – paxdiablo 2009-11-13 12:54:50