Wie finde ich heraus, in welcher Programmiersprache eine Anwendung geschrieben ist?
also ich möchte gerne wissen, welches der effizienteste Weg ist um herauszufinden in welcher Sprache ein Programm/Softaware/Anwendung/App geschrieben ist.
Sagen das die Datei-endungen aus? z.B. *.txt für Html oder *.py für Python ?
Welche Programmiersprachen sind gängig für: -Windows -Mac -Linux -Android -IOS usw.
Und es wäre nützlich wenn man dazu erwähnen könnte welche Editoren/Idle's für jeweilige sprachen am gängigsten zu benutzen sind. Zur Zeit beschäftige ich mich nebenher nur mit der P.Sprache "Python" aber möchte auch gern das Hintergrundwissen für die anderen haben.
Gruß
3 Antworten
Du musst Reverse Engineering betreiben - bei Skriptsprachen wie Python, PHP, Ruby, etc. ist das sehr einfach - man braucht nur die Datei öffnen, die Skripte werden nicht kompiliert, sondern zur Laufzeit interpretiert (ausgeführt).
Java, C, C++, Swift, Objective-C,... sind die Sprachen, die in den Maschinecode kompiliert und dann ausgeführt werden. Java macht etwas anderes, nämlich wird der Code in den Maschinencode, der im JVM (Java Virtual Machine) ausgeführt werden kann und weil JVM auf allen Plattformen gleich implementiert ist, ist binäre Javacode plattformunabhängig.
Das in Java geschriebenes Programm sehr häufig mit .jar (das ist ein Container) und dort liegen die kompilierten Sources. Es gibt einige Decompiler Tools, mit dem Du zurück compilen kannst - ob es so gut funktioniert, kann ich nicht sagen, ich habe damit nicht beschäftigt.
Die in C, C++, etc. geschriebene Programme kann man nicht so schnell erkennen - man braucht mehr Verständnis in die Maschinecode, um die typische Ausdrücke ableiten zu können.
Für Windows Anwendungen wird meist C# oder C++ (Visual Studio) genommen. Für Android Java (Android Studio, JetBrain IntelliJ IDEA) - für iOS Objective-C oder Swift (Xcode).
Und eine kleine Anmerkung noch:
*.txt für Html ~> das stimmt nicht. *.txt steht für eine Textdatei, also ohne Struktur - einfach nur Text. HTML Dokumente enden meist mit *.html oder (früher) *.htm.
Bestimmt weisst du das schon, aber trotzdem: HTML / HTML5 ist keine Programmiersprache - es ist nur ein Dokument so wie XML Dokument oder Word Dokument. Mit dem HTML kannst du die Dokument mit einem Struktur aufbauen. Die HTML Datei wird vom Webbrowser interpretiert und dargestellt. HTML kann JavaScript beinhaltet und das ist eine Skriptsprache, die von Webbrowser JavaScript Engine ausgeführt wird.
Welche Editoren zu welchen Sprachen:
Es steht jedem frei, welches Editor man dafür nimmt. Man braucht einen Interpreter und eventuell einen Compiler dazu. Manche nehmen gerne einfaches schlankes Editor - ohne die ganze Komplexität eines IDEs mitschleppen zu müssen. Ein schlankes Editor nehme ich sehr gerne, um kleinere Skripte zu schreiben - es geht schnell. Programm öffnen, neue Datei und dann loslegen. Ich mache das gern mit vim oder halt Sublime Text bzw. Atom.
Wenn es um grössere Projekte geht, dann nehme ich schon ein IDE.
Für Java/Scala: IntelliJ IDEA (Ultimative)
Für Python: vim / Sublime Text (mit netten Plugins für Pythonentwicklung z.B. API, Syntaxvalidierung, etc...)
Für PHP: PHPStorm / Zend Studio
C/C++: Je nach Plattform (Visual Studio, Xcode oder halt vim / Editor) man muss dann selbst Compiler bzw. Linker konfigurieren und ausführen.
Swift: Xcode
Und wenn man Grundverständnis vom Programmieren hat, dann fällt einem leichter, auf andere Sprachen zu wechseln. Man muss Grundlagen verstehen, z.b. was ist objektorientierte Programmierung, funktionale Programmierung (was die Idee dahinter ist), etc. diverse Entwurfmuster sollte man kennen - jede Platform hat eigenes API und dafür muss man Zeit nehmen, das ganze API näher kennenzulernen - mit einem Projekt lernt man es am besten und dadurch kriegt man die Expertise. Einfach so auswendig lernen, hilft kaum.
Viel Glück!
Es gibt ein Ebook für Anfänger dazu zum Thema Reverse Enginnering: http://beginners.re/RE4B-EN.pdf wenn du dich damit tiefer beschäftigen möchtest. Viel Spass :)
Vielen Dank ;) klar, interessiere ich mich für sowas und kann gar nicht genug Stoff aufsaugen.
Um das herauszufinden, musst du die Dateien auseinander nehmen.
Wenn du z.B. eine Android Datei anguckst. Das ist ja eine .apk
Das apk ist aber noch nicht die Programmiersprache, sondern nur die Aplikation, also die App. Die Programmiersprache dahinter kann alles mögliche sein, Java, C etc.
Um das herauszufinden muss man die .apk mit nem Programm, z.B. WinRar öffnen und einen genaueren Blick reinwerfen.
Die Dateien dort können dann ausschlaggeben sein, welche Programmiersprache genutzt wurde.
Bei anderen Geräten ist das ähnlich.
Allerdings ist bei Minecraft ja z.B. die Datein .jar und .java , da ist das relativ einfach rauszufinden womit das gemacht wurde ;)
Wenn der Quellcode vorliegt erkennt man das oft an den Endungen: .c .cpp .py .java .js usw.
Oder ein Blick in die Doku, da steht wie man es kompiliert - und da steht oft auch die Compiler-Aufrufe und Version drin.
Bei den IDEs bin ich bei Jetbrains und seiner Familie gelandet (ok, kostet Geld sind aber gut). Alternativ: eclipse (an ide for everything and nothing in particular).
Hey, ja Eclipse hatte ich mal kurz getestet wegen Java und für welche Programmiersprache benutzt man Jetbrains?
Jetbrains:
IntelliJ - Java
PhpStorm - PHP
WebStorm - JavaScript
PyChram - Python
RubyMine - Ruby
AppCode - iOS Entwicklung
CLion - C und C++
DataGrip - SQL und Datenbanken
ReShaper - VisualStudio Extensions für .NET
ReShaper C++ - VisualStudio Extensions für C++
und noch einige andere Tools rund um Entwicklung und Source Verwaltung
Was sind die Vorteile von AppCode gegenüber xCode? Ich entwickle nur nebenbei für iOS, komme aber mit xCode ganz gut klar. Wie ist die Integration mit CocoaPods?
Alles eine Frage des persönlichen Geschmacks. Man kann für Java ja Eclipse, Netbeans, VI oder IntellJ nehmen. Ich finde die Integration bei IntelliJ einfach am besten.
Die richtige Schreibweise von Xcode ist "Xcode" und nicht "xCode". AppCode bringt die alten Gewohnheiten mit (aus JetBrain Produkte wie IntelliJ, so dass Autocompletion, Klassen Templates, etc. wie gewohnt funktionieren, damit man gleich produktiv Code schreiben kann) es hat natürlich auch Nachteile z.b. Core Data Editor fehlt oder nicht vollständig, sowie Storyboard Editor ... Ich würde auch auf Xcode setzen, denn Xcode bringt alles mit, was für iOS Entwicklung möglich ist.
Vielen Dank für die ausführliche Antwort, das werd ich mir erst mal auf der zunge zergehen lassen und einige Begrifflichkeiten näher anschauen ;)