Mono.CECIL
Paweł Łukasik
Grupa WG.NET Warszawa - 10.04.2014
Agenda
- Co to?
- Po co?
- A co z System.Reflection?
- Dema
- Coś więcej?
- Minusy?
A co to?
- API - CRU(D) dla formatu ECMA CIL
- by Jb Evain
- nuget: Mono.Cecil
- wersja: 0.9.5.4
Dlls
- Mono.Cecil.dll
- Mono.Cecil.Pdb.dll
- Mono.Cecil.Mdb.dll
- Mono.Cecil.Rocks.dll
A po co?
-
zmiany aplikacji bez kodu źródłowego
-
uciążliwy i powtarzalny kod
-
analiza kodu
-
AOP
System.Reflection?
- Zawarte w .NET framework
- Brak wyładowywania bibliotek
- Traktuje .dll/.exe jako kod
- Kiepska wydajność
- Wysoki ‚memory-footprint’
Mono.Cecil?
- Oddzielna biblioteka
- Traktuje .dll/.exe jako ‚raw-data’
- Większa wydajność i mniejsze zużycie pamięci
CIL
Common Intermediate Language
ldloc.0
ldloc.1
add
stloc.0
ldc.i4.2
ldc.i4.3
call int32 Foo::Add(int32, int32)
stloc.0
.Sum()
- Pokazaliśmy jak możemy przejść przez kod biblioteki listując wszystkie jej elementy składowe
- Pokazaliśmy jak w dosyć prosty sposób możemy wstawić cały „plumbing code” bez w pływu na czytelność kodu
- Pełniejsza automatyzacja tego procesu za pomocą MsBuild tasks
- Pokazaliśmy jak możemy wzbogacać nasz kod, bez nadmiernego zaciemniania istotnych jego elementów
- Proste modyfikacje kodu, w celu ochrony naszej własności intelektualnej
Minusy Mono.Cecil?
- Praktycznie zerowa dokumentacja ☹
- ale... sporo można znaleźć w Google ☺
- poza tym źródła na https://github.com/jbevain/cecil
Dziękuję za uwagę!
Feedback:
Twitter: @pawel_lukasik
mail: pawel@octal.pl
blog: http://blog.octal.pl