如果.NET可執行文件是PE文件,爲什麼像UPX這樣的所有打包程序「腐敗」它?爲什麼UPX不能用於.NET可執行文件?
回答
UPX是專爲原生申請。這些是直接編譯到機器碼的應用程序。
針對.NET Framework的可執行文件不是本機應用程序,而是管理的。換句話說,它們在運行時環境(公共語言運行時,或CLR)之上運行,並被編譯爲「中間語言」(IL),直到運行時才編譯爲機器語言(此過程稱爲JIT,或即時編譯)。
UPX可以直接處理非託管機器碼,但它不適用於託管應用程序。如果JIT編譯器經過壓縮並因此無法讀取,它將如何即時編譯應用程序的代碼?它不會;它會看到文件已損壞。
雖然沒有大的損失。今天壓縮可執行文件比缺點有更多的缺點。除此之外,由於託管應用程序被編譯爲IL,所以它們通常比首先等同的非託管應用程序小。
但是你不能解釋爲什麼UPX無法處理託管指令。我確信有一個原因,但你沒有提到它。 「如果CPU壓縮並因此無法讀取,CPU將如何運行本機代碼?它不會;它會看到文件已損壞。」幾乎和UPX爲什麼不能壓縮x86二進制文件一樣好。例如,它可以在IL EXE周圍放置一個真正的EXE,並將IL EXE解壓縮到另一個文件,如https://en.wikipedia.org/wiki/UPX –
我想我已經介紹過了。 UPX直接處理非託管代碼。它解碼,所以它的工作。它不適用於JIT編譯的應用程序,因爲UPX的設計不是預先解壓縮代碼並將其提供給JIT編譯器。是的,我不認爲你有任何技術上的原因不能爲JIT編譯的應用程序編寫打包程序。但是,至少在我寫這個答案時,UPX不是。 –
- 1. 爲什麼可執行文件不可執行?
- 2. 爲什麼我的Makefile不能創建可執行文件?
- 3. 爲什麼我不能像這樣複製可執行文件?
- 4. 爲什麼java可執行文件不接受參數文件?
- 5. 爲什麼行動不執行功能?
- 6. 當由.NET編譯時,可執行文件包含什麼?
- 7. 爲什麼我不能執行scala文件?
- 8. 爲什麼這個批處理文件不能自動執行?
- 9. 爲什麼不安裝可執行文件(Ubuntu)
- 10. 爲什麼不g ++覆蓋可執行文件
- 11. 爲什麼這個before_filter不能執行?
- 12. 爲什麼不能執行SCHEMA_NAME.PACKAGE_NAME.PROCEDURE,Oracle
- 13. 爲什麼執行器不能關機?
- 14. 爲什麼不執行此功能?
- 15. 爲什麼CreateFileAsync()不能執行?
- 16. 爲什麼這最後不能執行?
- 17. proxy.cgi爲什麼不能執行?
- 18. 爲什麼else分支不能執行?
- 19. 爲什麼我不能執行RSpec?
- 20. 爲什麼finally塊不能執行?
- 21. 爲什麼條形圖不能執行?
- 22. 爲什麼From行不能用於我的郵件功能?
- 23. 創建NuGet包 - 爲什麼這個文件夾結構不能用於.NET 4.0?
- 24. 在ant任務Exec中,爲什麼爲可執行文件=「cmd」提供了<arg value =「/ c」/>?其他可能的可執行文件是什麼?
- 25. 爲了運行,VC++可執行文件需要什麼?
- 26. 爲什麼我能夠在運行時重命名Windows Service可執行文件?
- 27. tclsh85可執行文件和tclsh85s可執行文件有什麼區別?
- 28. 什麼可執行文件啓動了我的可執行文件?
- 29. 什麼是JuliaLang等同於Python的sys.exe可執行文件?
- 30. wix不能更新可執行文件
我想你在談論「[Ultimate Packer for Executables](http://upx.sourceforge.net/)」,當你使用「UPX」的縮寫? –