2011-09-01 11 views
8

No to pytanie może wydawać się dziwne, ale jego prosta - chodzi mi o to, czy mam „goto” (brtrue etc) w decompiled kodu, takich jak npCzy Mono.Cecil zajmuje się oddziałami, itp. Lokalizacją?

br IL_0003 
call ***** 
IL_0003: ret 

i dodać polecenie po tym * * call będzie br w najwyższym punkcie do ret, tak jak powinien, lub do tego kodu.

czy Cecil robi to sam, czy muszę zająć się wszystkimi oddziałami? :/ to nie byłoby bardzo trudne do naprawienia, ale jeśli Cecil nie robi wtedy po prostu nie zaczynam tego projektu, nie mam czasu (ani wiedzy) dla zaawansowanej magii IL: P

PS. przepraszam, jeśli jestem mylące rzeczy, ale jestem początkującym w .NET rzeczy;/i zawsze byłem odpychany przez to samo jak Java lub cokolwiek, co ma VM TBH.

* (tak wiem, że to nie będzie IL_0003 jej tylko dla przykładu) *

Odpowiedz

13

Tak, Cecil zaktualizuje oddział dla Ciebie.

Jedyny przypadek, w którym należy zadbać, to przypadek, w którym oddział jest oddziałem o krótkim kształcie. Jeśli wstrzykniesz za dużo instrukcji, może to spowodować przepełnienie.

Istnieje bardzo prosty sposób na poradzenie sobie z tym. Przed wstrzyknięciem kodu, wystarczy wywołać metody rozszerzenie SimplifyMacros z Mono.Cecil.Rocks, tak:

method.Body.SimplifyMacros(); 

To będzie włączyć br s w br.

A kiedy skończysz wstrzykiwanie kodu, po prostu zadzwoń:

method.Body.OptimizeMacros(); 

Który jest operacja odwrotna, to znaczy, że będzie starał się włączyć w br br s, jeśli to możliwe.

+0

Wow, taka szybka odpowiedź i od autora :) Dzięki człowiekowi najlepsze: P – n00b

Powiązane problemy