1 / 29

Java ja .NET Framework programmide kompileerimine masinkoodi

Java ja .NET Framework programmide kompileerimine masinkoodi. Siim Karus. Kava. Sissejuhatus Mis on baitkood või vahekeel? Võrdlus masinkoodiga Koodi sogastamine Masinkoodiks kompileerimine Java Kuidas töötab Java? Kuidas kompileerida Java baitkoodi masinkoodi? .NET Framework

keaton
Download Presentation

Java ja .NET Framework programmide kompileerimine masinkoodi

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Java ja .NET Framework programmide kompileerimine masinkoodi Siim Karus

  2. Kava • Sissejuhatus • Mis on baitkood või vahekeel? • Võrdlus masinkoodiga • Koodi sogastamine • Masinkoodiks kompileerimine • Java • Kuidas töötab Java? • Kuidas kompileerida Java baitkoodi masinkoodi? • .NET Framework • Kuidas töötab .NET Framework? • MSIL? • Kuidas kompileerida .NET Framework vahekeelt masinkoodiks?

  3. Mis on baitkood? • Käivitatavat programmi sisaldav binaarfail, mille moodustavad operatsiooni koodi ja andmete paarid (The Free On-line Dictionary of Computing ). • Ka masinkood on tegelikult (enamasti) baitkood. • Mõistet baitkood kasutatakse tihti märkimaks keeli, mis on inimese jaoks loetamatud kuid pole masinkood.

  4. Mis on vahekeel? • Keel, mis on teiste keelte vahel (näiteks ühest keelest teise transleerimiseks). • Pole mõeldud otse programmeerimiseks. • Lihtsalt dekompileeritav.

  5. Vahekeel Võimalik käivitada igal platvormil, millele on loodud interpretaator Reeglina sisaldab täiendavat informatsiooni programmi kohta Masinkood Optimeeritud oma platvormile, seega kiirem oma platvormil Raskem dekompileerida Interpreteeritav vahekeel vs. masinkood

  6. Miks kompileerida baitkood masinkoodiks? • Jõudlusvõit http://www.excelsior-usa.com/jetinternals.html

  7. Miks kompileerida baitkood masinkoodiks? • Mugavam paigaldus (pole vaja eraldi paigaldada interpretaatorit) • Lihtsam kaitsta intellektuaalomandit (dekompileerimine, algoritmide eraldamine ja neist aru saamine on keerulisemad) • Lisaks kasutatakse koodi sogastamist

  8. Koodi sogastamine • Muudame meetodite, klasside ja nimeruumide nimed. • Lisame täiendavaid “vigaseid” metaandmeid. • Lisame koodjuppe, mida reaalselt ei käivitata. • Krüpteerime koodijupid/sõned.

  9. Koodi sogastamine http://www.aisto.com/roeder/dotnet/

  10. Koodi sogastamine (dotfuscator community edition) http://www.aisto.com/roeder/dotnet/

  11. Kompileerimine masinkoodiks • Kasutusel kaks lahendust • JIT (Just-In-Time) • Kompileeritakse hetkel mil koodi reaalselt kasutada on vaja • AOT (Ahead-Of-Time) • Kompileeritakse enne koodi kasutamist

  12. Java = platvorm + keel http://java.sun.com/j2se/1.5.0/docs/index.html

  13. Java rakenduste tööpõhimõte • .java inimesele loetav lähtekood kompileeritakse javac abil Java baitkoodi. • Käsuga java käivitatakse interpretaator (Java Virtual Machine ehk JVM), mis interpreteerib baitkoodi. http://java.sun.com/docs/books/tutorial/getStarted/intro/definition.html

  14. Java baitkoodi kompileerimine masinkoodi (JHSVM) • Java HotSpot Virtual Machine (J2SE SDK-ga kaasas, kasutab ka näiteks Bea) kompileerib tihedamini kasutatavad koodijupid • klient (java –client minu.class ) ja • server (java –server minu.class) mood • Tegemist JIT kompilaatoriga

  15. Java baitkoodi kompileerimine masinkoodi (Excelsior JET) • Excelsior JETkompileerib kogu koodi (AOT kompilaator) • Võimaldab panna kompileeritud koodi suhtlema Java baitkoodis olevate klasside ja objektidega • Viited Java API klassidele ja meetoditele asendatakse viidetega Excelsior JET enda teekidele

  16. Java baitkoodi kompileerimine masinkoodi (Excelsior JET)

  17. Java baitkoodi kompileerimine masinkoodi (GCJ) • GCJkompileerib kogu koodi (AOT kompilaator) • GCC (Gnu Compiler Collection) osa • Vaba vabavaraline tarkvara • Konsoolirakendus • gcj --main=HelloWorld -o HelloWorld HelloWorld.java ./HelloWorld • Seob Java C++-ga (GCC jaoks on Java C++ kärbitud versioon + API komponendid)

  18. .NET Framework = platvorm European Computer Manufacturers Association • Baseerub ECMA standarditel ja raportitel: • CLI: • ecma-335, • TR-84 ja • TR-89 • C# (keel loodud spetsiaalselt .NET Framework jaoks): • ecma-334 • tulevikus ISO/IEC. Common Language Infrastructure International Organization for Standardization International Electrotechnical Commission http://www.mono-project.com/ECMA

  19. .NET Framework = platvorm • Algatajad olid Microsoft Corporation, Hewlett-Packard ja Intel Corporation (1. oktoober 2000). • Arendamisest on osa võtnud veel Borland, Fujitsu, Hewlett-Packard, Intel Corporation, International Business Machines, ISE, IT University Copenhagen, Microsoft Corporation, Monash University, Netscape, Novell Corporation, OpenWave, Plum Hall, Sun Microsystems ja University of Canterbury New Zealand http://www.mono-project.com/ECMA

  20. .NET keeled

  21. .NET Framework

  22. .NET Framework rakenduste tööpõhimõte 1 • Rakendus kompileeritakse MSIL failiks (tulemuseks .il fail). • Lisatakse “assembly-manifest” (fail sõltuvuste, metaandmete ja rakenduse turvainfoga seonduva infoga) ning lisatakse PE kood (tulemuseks .exe või .dll assembly). Samas optimeeritakse koodi. (ilasm) • Käivitades rakenduse .NET Framework kompileerib käivitatava koodi (JIT tüüpi kompilaator).

  23. .NET Framework rakenduste tööpõhimõte 1 • Tulemus:

  24. .NET Framework rakenduste tööpõhimõte 2 • Rakendus kompileeritakse MSIL failiks (tulemuseks .il fail). • Lisatakse “assembly-manifest” (fail sõltuvuste, metaandmete ja rakenduse turvainfoga seonduva infoga) ning lisatakse PE kood (tulemuseks .exe või .dll assembly). Samas optimeeritakse koodi. (ilasm) • Loodud assembly kompileeritakse ngen abil masinkoodiks. • Käivitades rakenduse tegeleb .NET Framework vaid mälu haldamisega (ega interpreteeri koodi).

  25. .NET Framework “Assembly Cache” • Kahte tüüpi vahemälu: • MSIL assembly cache • Võib olla osaliselt kompileeritud JIT poolt • Lisab versioneeritud komponentide/moodulite kasutamise võimaluse • Native image cache • ngen tööriista (AOT kompilaator) poolt kompileeritud (ja platvormile/riistvarale optimeeritud) moodulid ja komponendid ngen = Native Image Generator Tool

  26. MSIL • Punktiga algavad read on kompilaatori direktiivid. • Ilma punktita algavad read sisaldavad MSIL käske. • Meetodil tagastustüüp ja nimi, argumendid, sisu { ja } poolt eraldatud blokis. • Sarnane assemblerile ja C++-le. http://www.devcity.net/Articles/54/msil_1_intro.aspx

  27. MSIL • Näide:.assembly AssemblyNimi {}.method static void HelloWorld() { .entrypoint ldstr “Hello World.”call void [mscorlib]System.Console::WriteLine(class System.String)ret } • Kompileerime:ilasm HelloWorld.il Märgib programmi käivitamisel käivitatavat meetodit Paneb stringi pinusse Kutsub mscorlib.dll nimeruumi System klassi Console meetodit WriteLine Väljub meetodist http://www.devcity.net/Articles/54/msil_1_intro.aspx

  28. MSIL kompileerimine masinkoodi (Salamander) • Salamander võimaldab kompileerida .NET Framework-i kasutava rakenduse masinkoodi kompileerides (staatiliselt) sisse ka kõik vajalikud lisakomponendid. • Integreeritav Visual Studioga.

  29. Tänan Küsimused?

More Related