2015-04-20 20 views
-1

我想知道如果我可以改變system.dll 函數而不是返回0;我改變它返回-1;我可以在system.dll中更改函數嗎?

並重新編譯並再次使用它。

如果是的話我們該怎麼做?

+0

這真的是一件壞事,因爲它會打破依賴於該函數返回0的所有其他代碼。你能更詳細地解釋爲什麼你需要改變它,也許有一條比試圖更好的路徑重新編譯一個核心庫... –

+0

你的目標是什麼?一個惡作劇?當然,你知道如果你可以做這樣的事情,你的「evmg」版本的System.dll將不會被微軟簽名,對吧? –

+0

真的很難想象爲什麼你需要這個 – demonplus

回答

3

不,你不能。你不能這樣做,因爲你不能強烈簽署你使用微軟簽名產生的程序集,所以引用系統程序集的所有其他程序集都會抱怨(我知道這是因爲兩週前我試圖做類似的事情: - ),但我不想重新編譯。對我來說,使用Mono.Cecil來直接編輯系統組件的副本就足夠了)

如果你正在編寫單元測試,你可以使用Fakes(需要Visual Studio Premium)。它允許您將程序集的方法重定向到代碼,控制輸出以及方法的功能。

從技術上說,你可以做這個假貨「庫」做的事情:http://www.codeproject.com/Articles/453065/ILRewriting-for-beginners但是請注意,這很複雜。你在C/C++中爲你的exe創建一個「runner」。這個「runner」(它在技術上是一個CLR主機)可以「重新編寫」程序集的.NET代碼。

相關問題