簡體   English   中英

C#(MSIL)轉換為原生X86代碼?

[英]C# (MSIL) into native X86 code?

我首先要說的是我的目標是將MSIL轉換為本機X86代碼。 我的程序集仍然需要安裝.net框架,我很好。 NGEN不是我想要的,因為你仍然需要原裝配件。

我遇到了ilasm ,我想知道這就是我想要的,這會產生純粹的匯編代碼嗎?

我看過其他項目,比如mono(它不支持我的應用程序使用的一些關鍵功能)和.net鏈接器,但它們很簡單,只需用.net框架創建一個EXE,這不是我想要的。

到目前為止,任何研究都已提出......你做不到。 我真的不確定為什么JIT在加載MSIL程序集時會這樣做。 我有自己的理由想要這個,所以我想我的問題歸結為此。

  1. 我發布的鏈接是否有用?

  2. 有什么可以將MSIL變成x86程序集嗎?

有各種第三方代碼保護包可用於隱藏IL,並通過一個特殊的引導加載程序將其打包,該引導加載程序僅在運行時解包。 如果您擔心代碼的反匯編,這可能是一個選項,盡管大多數這些第三方軟件包也已經破解(遺憾的是,有些不可避免。)簡單的混淆最終可能同樣有效,假設這是您的基本目標。

與“預先評估”IL相關的主要挑戰之一是您最終在本機代碼中包含固定地址引用。 當加載本機代碼以在CLR下執行時,這些又需要“重新基礎”。 這意味着您需要的不僅僅是編譯的邏輯; 您還需要在加載代碼時重新定義固定引用所需的所有引用上下文信息。 它不僅僅是緩存代碼。

與大多數事情一樣,第一個問題應該是為什么而不是如何。 我假設你有一個特定的目標,如果你想自己生成本機代碼(同樣,為什么x86?為什么不是x64呢?)。 這是JIT編譯器的工作 - 僅在需要時在特定平台上編譯優化指令集,並在以后執行。

我可以推薦嘗試理解CLR如何工作以及JIT如何工作的最佳來源是查看SSCLI - 基於ECMA-335規范的CLR實現。

你考慮過不使用C#嗎? 鑒於C#編譯器的輸出是MSIL,如果不是你想要的話,在不同的平台上開發是有意義的。

或者,聽起來NGEN會執行您想要的操作,它只是不處理將整個事物放入可執行文件中。 您可以分析生成的NGEN圖像,以確定需要完成哪些操作(請注意,根據文檔,NGENed圖像是PE文件)

以下是NGEN的鏈接,其中包含有關圖像存儲位置的信息: C:\\windows\\assembly\\NativeImages_CLR_Bit ,例如C:\\windows\\assembly\\NativeImages_v2.0.50727_86 請注意,.NET 3.0和3.5都是2.0的一部分。

暫無
暫無

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

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