2011-09-01 55 views
8

那麼這個問題似乎很奇怪,但它的簡單 - 我的意思是,如果我有一個像例如Mono.Cecil會照顧樹枝等位置嗎?

br IL_0003 
call ***** 
IL_0003: ret 

的反編譯的代碼「轉到」(brtrue等),我認爲*後添加一個命令*電話會將最高點處的廣告像它應該或者那個代碼一樣回退。

是否塞西爾自己做,或者我必須照顧所有這些分支? :/ 它不會是很難解決這些問題,但如果塞西爾犯規的話,我根本不會啓動這個項目,我已經沒有時間(或知識)的高級魔法IL:P

PS。對不起,如果即時通訊困惑的事情,但我是一個在.NET的東西begginer; /我總是排斥它相同的Java或任何有一個VM TBH。

*(是的,我知道它不會是IL_0003它只是舉例)*

回答

13

是的,絲絲將更新你的分支。

你必須要處理的唯一情況是分支是一個短格式分支的情況。如果你注入了太多的指令,它可能會溢出。

有一個非常簡單的方法來處理這個問題。注入代碼之前,只需調用擴展方法SimplifyMacros從Mono.Cecil.Rocks,像這樣:

method.Body.SimplifyMacros(); 

這將會把br.s到BR。

大功告成注入代碼時,只需撥打:

method.Body.OptimizeMacros(); 

這是相反的操作,也就是說,它會嘗試如果可能的話把BR成br.s。

+0

哇,這樣一個快速的答案,從作者:)感謝你最好的人:P – n00b