2017-03-01 103 views
2

好吧,所以我有一個應用程序,我一直負責編輯該源不可用,並且由於機密性,我無法共享應用程序/代碼 - 我意識到這使得這些有些問題具有挑戰性,但是因爲我已經完成了這個任務,所以我認爲它是簡單的,我忽略了。編輯沒有源代碼的C#彙編沒有反映執行更改

我已經在過去執行這一點,唯一不同的是,這是使用4.5和最新的C#編譯器等

這裏一個新的版本的情況:

我可以打開應用程序,並閱讀它適當地編輯IL。事實上,我可以在反射桌面(最新),Telerik(我通常使用的)也使用更新的reflexil中使用reflexil進行編輯,而我也嘗試過dnSpy每晚最新的3.0.1。

哎呀,我以爲我失去了理智,我甚至用舊的GreyDragon打開它,還編輯了一些IL,保存了EXE程序集,甚至直接在入口點IL也不執行更改,但由於事先未改變原始的,但在所有這些工具中,如果我重新打開之前編輯和保存的程序集exe文件,它會在所有情況下正確顯示修改後的C#以及相應的IL指令。

我可以精確定位的唯一事情是可以再次有所不同的是更新的目標dotnet版本,並將其編譯到新的C#編譯器/ ver中。

那麼,是否有任何理由認爲,最新版本的C#Rosylyn等會阻止IL編輯方法(以及幾乎所有可以執行IL編輯的工具),它們之前從現在開始工作,幾乎就像一個輔助指令備份表等等,保存原始未經編輯的副本,將執行?或者,組裝再生的特定「設置」是否會導致這種行爲?

讓我們從開始試圖描述更精細的細節之前我可能缺少的一些基本障礙開始。

再次抱歉沒有實際的代碼分享,但希望真正的上師會知道發生了什麼,並有想法。謝謝!

+0

這些程序集是否駐留在GAC中? –

+0

您不必共享機密代碼,但您始終可以共享您爲此問題而編寫的代碼。另外...你的問題是什麼?如果你不想添加代碼來簡單地解釋你試圖存檔的內容,你可以添加粗體文本來分隔這段文本。 –

+0

我想這裏是simplist的例子: 添加IL代碼void main不做任何比彈出一個messagebox說「測試」。一旦我編輯了所有的exe文件,它就會忽略編輯,就像在某處有所有舊代碼的備份一樣,而這只是一個不在GAC中的EXE。再次,如果我將編輯後的exe文件拖回到所有可以編輯IL的四個工具之一中,它就會顯示新的C#反編譯指令,用於消息框調用和IL,以及實際運行的組織代碼NONE。 –

回答

0

發表我自己的答案不能相信我錯過了這一點。

答案是即使它沒有作爲GAC中的程序集安裝,但此應用程序行爲發生了變化,我錯過了某個進程運行NGEN.EXE以將NI本機映像編譯爲NATIVE圖像並安裝它 - 然後包含有問題的friggin機器代碼的緩存版本 - 正是我的直覺所發生的事情,我只需要找到「備份副本」即可。