Kompilacja

Zaczęty przez Higatsu, Listopad 11, 2008, 12:05:27 PM

Poprzedni wątek - Następny wątek

Higatsu

Czy jest możliwe po kompilacji plików wrócić do plików źródłowych?

Maślan

tak.

Istnieje taka możliwość jednakże jest to "nieopłacalna" czynność. Ale jeżeli już Cię to interesuje zaglądnij do tematu Ważne Linki - tam podałem ostatnio linka do programu który to zrobi :)

Gher

Wiesz może jak to zrobić? Bo bym chciał od razu cały dp na pliki źródłowe przerobić. Trzeba zrarować i poźniej cos w tym programie dac?

Maślan

plik *.jar rozpakowywujesz winrarem.

Póżniej programem DJ java decompiler sobie oglądasz pliki *.class - można całego core "dekompilowac" ale to wymaga duuużo czasu oraz nie opłaca się :P

Gher

Ok dekomilacja udaje się tylko teraz nie mogę po zmianie zamienić pliku .java na .class

Maślan

bo ponowna kompilacja jest nie możliwa :)

Gher

Kurde ale lipa czyli nie ma możliwośc wprowadzenia zmian w jakims pliku?

Maślan

nie ma - dekompilacja służe jedynie reverse engeringu czyli sprawdzenia na jakiej zasadzie działa program w celach uzyskania informacji potrzebnych przy póżniejszym zastosowaniu we własnej aplikacji :P

Gher

To na czym polega kompilacja ze źródła nightly?

Maślan

masz żródła i je sobie kompilujesz xD

Gher

Nom ale pliki źródłowe są też java

Maślan

Cyat Luna:

CytatKazdy program, jakiego uzywamy (a wiec np notatnik, czy word, czy  gra L2 albo serwer do L2, czy nawet system operacyjny) ma poczatek w kodzie zrodlowym.
Kod zrodlowy jest to zwykly "dokument" napisanyh przez programiste, w jezyku dla niego zrozumialym.
(Dlatego w kazdym jezyku mamy tak wiele mowiace slowa jak if, while, function, return, goto itd). Jednak zeby jezyk ten byl zrozumialy dla komputera, musi byc w pelni wyspecyfikowany i jednoznaczny. Ogolnie mozna taki jezyk napisac jezykiem programowania.

Po napisaniu juz kodu programu przez programiste moga dziac sie rozne rzeczy, zalezne od tego jaki jezyk sie wybralo:

1) Napisany przez nas kod moze byc od razu wykonany przez jakies srodowisko, bez kompilacji. Jezyki takie nazywa sie jezykami interpretowanymi i zalicza sie do nich np PHP, ktore modul php czyta w takiej formie jak zostaly napisane i od razu wykonuje.

2) Wiele jezykow jest kompilowanych przez kompilator do kodu natywnego (np c, c++). Kod natywny jest juz "czysta" forma programu ktora od razu moze byc wykonana. Takie jezyki charakteryzuja sie tym, ze np skompilowane na windowsie nie zadzialaja na linuxie (pomijajac rozne wine).

3) Jezyki kompilowalne do kodu posredniego (np Java). To jest to co znajduje sie w plikach .class. Kompilator javy (javac) kompiluje kod zrodlowy z plikow .java do tzw bytecode'u, ktory mozna okreslic jako "pseudoassembler" jednak zaden procesor nie wykona takiego kodu od tak. Wymagana jest do tego maszyna wirtualna. Dzieki obecnosci maszyny wirtualnej, pliki .java skompilowane np pod windowsem (do .class) beda mogly byc uruchomione zarowno na windowsie, linuxie, czy solarisie.

Maszyna wirtualna odczytuje pliki .class i (w przypadku javy) kompiluje je do kodu natywnego, juz pod system na ktorym pracuje.

Pytasz jak otworzyc pliki .class - ty nie masz najmniejszej potrzeby ich otwierac, one nie sa przeznaczone dla ciebie, tylko dla maszyny wirtualnej.
Mozesz conajwyzej je uruchomic.

Czego maszyna wymaga od programu, zeby mogla go uruchomic:

W javie wszystko jest obiektem. Nie mozna (tak jak w c) stworzy pliku i w niej tak po prostu zdefiniowac metody main().
W javie glowna klasa (Np nazywajaca sie GameServer) musi zawierac statyczna metode (o tym co to jest metoda i co to znaczy ze jest statyczna, mam nadzieje ze sobie poczytasz) o nazwie main().

Po skompilowaniu pliku GameServer.java do GameServer.class
Wystarczy ze wpiszesz w konsoli:
java GameServer
wtedy maszyna wirtualna skompiluje bytecode do kodu natywnego, nastepnie zaladuje klase GameServer i bedzie probowala odpalic statyczna metode main().

To tak na wstep.

To Ci rozwieje wątpliwości i pytania

Nemesiss

#12
*.java -> kompilacja (np javac) -> *.class
*.class -> dekompilacja -> *.java

Dekompilacja zwraca najczesciej kod malo czytelny, niezrozumialy. Moze zamiast dekompilowac latwiej bedzie sciagnac kod zrodlowy z SVN?


Maślan: Może zrozumie :P

Gher

Właśnie w tym problem że ten team nie udostępnia plików z svn


No ok to tak rozpakowałem plik jar otworzyłem plik enterworld.class i chcialem zmienić powitanie "Welcome to the World of Lineage II". Nom i jak zmieniam to wyskakuję mi żeby zapisać ten plik i zapisuje w postaci java.

Maślan

zrozum że kodu z dekompilacji nie zkompilujesz w pełni działającą aplikację.


Podaj nazwe tego teamu to zaraz bedziesz miał Source code

Gher

#15
www.l2rt.ru

Ja nie mogłem nigdzie znaleźć ich plików źródłowych

Maślan

kolego nie mozesz używać znanych serwerpacków a nie rosyjskich ? :P

Soul

No dokładnie. Jedyne chyab słowo, które tam zrozumialem, to Lineage 2 xD
Prepare for unforeseen consequences...

Maślan

Cytat: Soul w Listopad 11, 2008, 05:35:47 PM
No dokładnie. Jedyne chyab słowo, które tam zrozumialem, to Lineage 2 xD

a ja jeszcze developers :P

Soul

"RusTeam :: LineAge II Dev Server", "KTO", "Skin designed by Soi Edit by Zloctb (Red Z Group)" i "Copyright ©2000 - 2008, Jelsoft Enterprises Ltd." xD

Cluster nawet imponujący...

Dobra. Nie róbmy offtopa ;)
Prepare for unforeseen consequences...

Gher

Właśnie zależy mi na ich plikach ale nie ma tam nigdzie odnośnika na forum do svn. Chce edytować ten napis "Welcome to the World the Lineage II"

Soul

Bez plików źródłowych tego nie zmienisz niestety.
Prepare for unforeseen consequences...

Maślan

#22
a Gher dlaczego nie napiszesz PM do jednego z adminów z pytaniem czy udostępnią Ci svn ?


Soul: tym bardziej, że rozumiesz rosyjski xD

Trudno po ang napisać Gher ? :P Napewno zrozumieją heheh

Gher

Napisali mi że nie udostępniaja. Znacie może jakieś teamy które dalej zajmują się Interlude i posiadają svn?

Soul

Z reguły jest tak, że na svnie masz każdą kronikę, jaką zajmował się dany team.
Prepare for unforeseen consequences...