Mono.CECIL

Paweł Łukasik

Grupa .NET Białystok - 9.04.2014

Agenda

  • Co to?
  • Po co?
  • A co z System.Reflection?
  • Dema
  • Coś więcej?
  • Minusy?

About.me


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

  • stack based

ldloc.0
ldloc.1
add
stloc.0    

  • object oriented

ldc.i4.2
ldc.i4.3
call int32 Foo::Add(int32, int32)
stloc.0



Demos



Statystyki




INotifyPropertyChanged



MsBuildTask




AOP



Obfuscator kodu

.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

Inne zastosowania?

Minusy Mono.Cecil?

  • Praktycznie zerowa dokumentacja ☹
 
  • ale... sporo można znaleźć w Google ☺

  • poza tym źródła na https://github.com/jbevain/cecil



Bonus?


Fody



Pytania?

Dziękuję za uwagę!


Feedback:
Twitter: @pawel_lukasik
mail: pawel@octal.pl
blog: http://blog.octal.pl