Signatur von Main-Methoden?

Status
Nicht offen für weitere Antworten.

Ice-Tea

Bekanntes Mitglied
Kurz zum Gebrauchszweck:
Ich bastel grad ein Programm, welches Java-Jar Dateien aufnimmt und diese starten kann. Da das ganze später P2P läuft, möchte ich sicherstellen das nur Ausführbare Jar-Files 'hochgeladen' werden. Mir reicht da ein einfach Dateierweiterungsprüfung nicht.

Gibt es eine eindeutige Signatur von der Main-Methode?
 

L-ectron-X

Gesperrter Benutzer
???:L In Java ist die eindeutig, weil einzigartig...

[HIGHLIGHT="Java"]public static void main(String[] args)[/HIGHLIGHT]
 

L-ectron-X

Gesperrter Benutzer
Warum guckst du nicht in der Manifest-Datei nach der Main-Class?
Wenn's eine gibt, hast du es mit einem ausführbaren Jar zu tun.
 

Ice-Tea

Bekanntes Mitglied
Ich kann ja schlecht nach "public static void main(String[] args)" im Bytecode bzw. in clasfiles suchen
 

Ice-Tea

Bekanntes Mitglied
Reicht mir nicht.
Dann bräuchte man nur ein Textfile erstellen und in ein umbenanntes Zipfile stecken und schon ist die sache 'gehackt'.

Ich dachte mir das so:
Im Manifestnachsehen wo die Mainmethode liegen soll und daraufhin prüfen ob es in dieser klasse tatsächlich eine Mainmethode gibt
 

hdi

Top Contributor
Eine Manifest Datei alleine ist auch keine Garantie dafür, dass es ein ausführbares
Programm ist.

Ich kann ja als .jar zusamannezippen worauf ich Lust hab.

Du kannst natürlich

1) nach einem src-zip im jar suchen, und dort in allen Dateien nach der main
2) einen De-Obfuscator nutzen falls du nur die classfiles hast.

Die main-Methode sollte er dir so wie sie im Original ist rausparsen können.

Dann hast du eigentlich auch einigermassen die Gewissheit, dass das Programm
erfolgreich kompilieren konnte und wirklich etwas macht.

edit: Das "anstarten" würde ich mal schön lassen. P2P? Have fun, ein Java-Programm
dass dir 95% aller Daten auf der Platte löscht ist ein 3-Zeiler.

edit2:
Die main Methode lässt sich übrigens nur mit RegEx finden, was ja nich so schwer
ist, aber ich sag's nur. Der Parameter-Name kann beliebig sein, und statt
String[] args könnte String args[] stehen, bzw. String... args.
 
Zuletzt bearbeitet:

Ice-Tea

Bekanntes Mitglied
Viel zu kompliziert.

@hdi: sollche 3 Zeiler haben aber auch eine Signatur, die lässt sich recht schnell rausfiltern. Aber dafür ist mein Virenscanner verantwortlich ;)

Ich werd mal sehen ob in verschiedenen Main-Klassen einen eindeutigen ansatz finde(bis auf den Klartext).
 
T

tuxedo

Gast
Ähm, lässt sich nicht mit Reflection in Klassen reinschauen und nachsehen ob es eine Methode die gibt "main" heisst, "public" und "static" und "void" ist und ein String-Array als Argument hat?

Wäre jetzt mein erster Ansatz ohne auch nur 5sek nachgedacht zu haben :autsch:

- Alex
 

thE_29

Top Contributor
Jo, auch das wäre eine Möglichkeit gewesen!

Mein Programmcode geht sowieso her und schaut zuerst in der Manifest nach!
Danach suche ich halt die main Signatur. Obwohl es mit loaden und nachgucken auch gehen würde.

Nachteil ist halt, dass die Klasse dann halt geladen ist. Ob man das will oder nicht ist ja ne andere Frage..
 

hdi

Top Contributor
Aber dafür ist mein Virenscanner verantwortlich

Hm was haste denn für einen? Also ich denke nicht dass herkömmlich Scanner
jar-Archive abscannen können auf sowas, oder?
Also Norton, McAffee und der ganze Mist ;)

Mein AVG zB sieht eine "dangerous.jar", die alle Dateien auf der Platte löscht
als absolut ungefährlich an...
 

hdi

Top Contributor
Ne mal ernsthaft Ice-Tea...
Ich denke Virenscanner können nicht sonderlich gut mit jar's umgehen.
Erekennt deiner sowas? Falls ja, was für einen hast du?
 

hdi

Top Contributor
Ja ich meine Java, das ist wohl das typische für jar's oder ;)
Sach ma an.. mich interessiert das wirklich. Wie stellst du dir sowas vor?
Oder hab ich den beschisstensten Scanner auf der Welt?
 

Ice-Tea

Bekanntes Mitglied
Also das mit dem static ohne Main funktioniert bei mir nicht. Zumindest nicht als ausführbares Jar.
Ich wüsste auch nicht wo das Manifest in solch einem Fall hinzeigen sollte/müsste/könnte.
 

The_S

Top Contributor
Najo, du kannst ne Exception dazuhauen, dass wars aber auch schon!

Du kannst noch varargs verwenden (was aber intern ja ohnehin wieder ein array ist), und die Methode um strictfp, final und synchronized erweitern. Und halt die Exception werfen.

Also das mit dem static ohne Main funktioniert bei mir nicht. Zumindest nicht als ausführbares Jar.

Im Manifest wird ja explizit eine Klasse als Main angegeben. Ich vermute, wenn die Klasse dort keine Main-Methode hat, wird auch nichts ausgeführt. Ohne JAR funktionierts auf jedenfall.
 

Illuvatar

Top Contributor
Also das mit dem static ohne Main funktioniert bei mir nicht. Zumindest nicht als ausführbares Jar.
Ich wüsste auch nicht wo das Manifest in solch einem Fall hinzeigen sollte/müsste/könnte.

Naja, du kannst trotzdem auf die Klasse verweisen, die den static-Block enthält. Dann ist es eben so: Klasse wird geladen => static-Block wird ausgeführt => main-Methode wird gesucht => nicht gefunden => Error
Wenn der static-Block System.exit enthält (Beispiel im Blog-Buch), wird der Fehler natürlich sozusagen unterdrückt. Wenn man z.B. eine UI starten will, kann man im static-Block vielleicht auch wait() aufrufen, dann kommt der Fehler auch nie, und die UI läuft in einem anderen Thread.
Sinn macht das alles natürlich keinen.
 

Ice-Tea

Bekanntes Mitglied
Ich hab grad noch mal ein wenog rumgehext :)

public strictfp synchronized final static void main(String args[]) { ...
==
public static void main(String args[]) { ...

Beide haben die gleiche Signatur

01 00 04 6d 61 69 6e 01 00 16 28 5b 4c 6a 61 76 61 2f 6c 61 6e 67 2f 53 74 72 69 6e 67 3b 29 56 01 00
01 00 04 6D 61 69 6E 01 00 16 28 5B 4C 6A 61 76 61 2F 6C 61 6E 67 2F 53 74 72 69 6E 67 3B 29 56 01 00
 

The_S

Top Contributor
Ich hab grad noch mal ein wenog rumgehext :)

public strictfp synchronized final static void main(String args[]) { ...
==
public static void main(String args[]) { ...

Beide haben die gleiche Signatur

01 00 04 6d 61 69 6e 01 00 16 28 5b 4c 6a 61 76 61 2f 6c 61 6e 67 2f 53 74 72 69 6e 67 3b 29 56 01 00
01 00 04 6D 61 69 6E 01 00 16 28 5B 4C 6A 61 76 61 2F 6C 61 6E 67 2F 53 74 72 69 6E 67 3B 29 56 01 00

Interessant. Evtl. nehme ich das mit ins Java-Blog-Buch auf. Und wie schauts aus, wenn zusätzlich eine Exception geworfen werden könnte?
 

Ice-Tea

Bekanntes Mitglied
public strictfp synchronized final static void main(String args[]) throws Exception{ ...

stimmt ebenfalls überein
 

thE_29

Top Contributor
Tjo, hab ich die ultimative Signatur entdeckt :D

Weiß gar nicht wie ich die eigentlich gefunden habe.. Hrhr ;)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
M JDK installieren MD5 SHA-1 Signatur in JAR nicht mehr vertrauenswürdig Allgemeine Java-Themen 3
R Signatur von Methoden in eine Datei schreiben? Allgemeine Java-Themen 4
Semox Signatur einer Methode auslesen Allgemeine Java-Themen 4
C javamail signatur und verschlüsselung Allgemeine Java-Themen 2
R Signatur fuer Applets. Allgemeine Java-Themen 5
K Probleme mit Signatur Allgemeine Java-Themen 3
C Signatur Frage Allgemeine Java-Themen 6
G JFileChooser öffnet sich nicht im Browser ( trotz Signatur ) Allgemeine Java-Themen 10
N 2 Interfaces mit Methoden selber Signatur implementieren Allgemeine Java-Themen 5
O Signatur? Allgemeine Java-Themen 2
P Fehler: Hauptklasse Main konnte nicht gefunden oder geladen werden Ursache: java.lang.ClassNotFoundException: Main Allgemeine Java-Themen 24
urmelausdemeis Exception in thread "main" java.lang.Error: Unresolved compilation problem: Allgemeine Java-Themen 7
Calli11 Was muss ich hier in die Main schreiben, damit das Programm ausgeführt wird? Allgemeine Java-Themen 4
Encera Zweite Main-Methode zuschalten Allgemeine Java-Themen 18
Splayfer Problem: no main manifest attribute Allgemeine Java-Themen 3
M Keine weitere Eingabe in der Main möglich. Eventueller Ansatz über while. Allgemeine Java-Themen 8
F Konstante an main - Argumenten initialisieren Allgemeine Java-Themen 1
S Exception in thread "main" java.lang.NullPointerException at FamilienApp.main(FamilienApp.java:15) Allgemeine Java-Themen 1
F Was ist der Dateityp meines Parameters für die Main Methode. Allgemeine Java-Themen 6
E HILFE !! Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/io/FileUtils Allgemeine Java-Themen 4
B Übernommene Variablen(werte) aus der Main-Klasse ändern? Allgemeine Java-Themen 9
W Warum muss void main() public sein? Allgemeine Java-Themen 3
G Programm, das nach abgearbeiteter main Methode weiterläuft Allgemeine Java-Themen 72
javaerd Binomialkoeffizient ausrechnen, Exception in thread "main" java.lang.StackOverflowError Allgemeine Java-Themen 6
L sortiertes Array im main aufrufen klappt nicht. Allgemeine Java-Themen 3
Tort-E Manifest Main-Class Allgemeine Java-Themen 8
J Exception in thread "main" java.lang.NoClassDefFoundError Allgemeine Java-Themen 4
A main-class Not found Allgemeine Java-Themen 3
A Konstrukt ohne Main für Xml-Parser Allgemeine Java-Themen 1
P JDK installieren Error: Could not find or load main class HelloWorld.java Allgemeine Java-Themen 3
I JFrame Icon in Main übergeben Allgemeine Java-Themen 1
Phash Can't find Main Class Allgemeine Java-Themen 4
X Could not find the main class programm will exit (textdokument) Allgemeine Java-Themen 3
127.0.0.1 Subversion neues SVN Projekt, keine Main gefunden ?! Allgemeine Java-Themen 7
S Could not find the main class Allgemeine Java-Themen 7
B Mal wieder "Could not find the main class" Allgemeine Java-Themen 3
C Could not find the main class. Allgemeine Java-Themen 15
I Main wird nicht gefunden Allgemeine Java-Themen 3
B Threads Main Thread warten auf abgebrochen Task warten lassen Allgemeine Java-Themen 25
A Could not find main class: start Allgemeine Java-Themen 5
S main() class finden Allgemeine Java-Themen 7
hdi Could not find main class? Allgemeine Java-Themen 8
B Cannot find main-claas... Allgemeine Java-Themen 21
G jar Datei findet Main Class nicht... Allgemeine Java-Themen 2
P Java Editor Could not find the main class GUI. Programm will exit. Allgemeine Java-Themen 3
E Programm von Main Methode starten Allgemeine Java-Themen 9
BattleMaster246 Could not find the Main class Allgemeine Java-Themen 30
reibi Main-Class in Jarfile Allgemeine Java-Themen 3
G Hauptthread anhalten / Unterschied zwischen Main-Thread und dialogelement-Thread Allgemeine Java-Themen 2
badfish Inerhalb der [void main] auf ein Objekt der [protected void] zugreifen Allgemeine Java-Themen 13
N Probleme mit .jar 'Could not find main class' Allgemeine Java-Themen 3
N Exception in thread "main" java.lang.UnsatisfiedLinkError: no lwjgl in java.library.p Allgemeine Java-Themen 4
J Main-Thread soll auf alleKinder Threads warten Allgemeine Java-Themen 5
B Main Thread Status abrufen Allgemeine Java-Themen 4
N import com.sun.tools.javac.Main; Allgemeine Java-Themen 1
V main(...) aus Klasse in PDF starten? Allgemeine Java-Themen 3
B UML: Main classe verschwindet nach code generierung nicht?! Allgemeine Java-Themen 4
T zu Beginn der main: Heap space ermitteln und hochsetzen Allgemeine Java-Themen 11
J Applet in JAR packen - was muss in main() stehen? Allgemeine Java-Themen 12
E beim Ende der main() das Programm nicht beenden Allgemeine Java-Themen 3
J Unicode: cmd parameter (main args); exec params; filenames Allgemeine Java-Themen 2
V Mehrere main() in jar, wie starten? Allgemeine Java-Themen 4
J Methode nicht ausführbar in main Allgemeine Java-Themen 7
P Kann .jar nicht ausführen - main class not found Allgemeine Java-Themen 6
B Jar File und die Main Klassen Allgemeine Java-Themen 3
M zwei main-Methoden Allgemeine Java-Themen 7
L static main - Spezifikation? Allgemeine Java-Themen 7
N Main-Klasse wird beim Aufruf des JARs nicht gefunden Allgemeine Java-Themen 8
J Exception in thread "main" java.lang.OutOfMemoryEr Allgemeine Java-Themen 26
G [JDK 6u2] - JAR Failed to load Main-Class manifest attribute Allgemeine Java-Themen 6
P Zugriff von Klasse 2 auf Klasse 1 (die main methode hat) Allgemeine Java-Themen 5
G Programm ohne Main Allgemeine Java-Themen 10
M Parameter an main übergeben aber wie? Allgemeine Java-Themen 4
J jar-Datei enthält keine Main-Class Allgemeine Java-Themen 22
C Mehrere main-Klassen in JAR Allgemeine Java-Themen 2
S Exception in Thread "main" java.lang.NoClassDef. b Allgemeine Java-Themen 2
G "Could not find the main class. Program will exit" Allgemeine Java-Themen 20
A Warum gibts die Main und was sollte drin stehen? Allgemeine Java-Themen 31
B Exception in thread "main" java.lang.NoClassDefFou Allgemeine Java-Themen 12
S Programmlogik, wo ist die Main? Allgemeine Java-Themen 9
C Mehrere main-Methoden in einer jar Allgemeine Java-Themen 7
J Warum heißt es eig. "public static void main" ? Allgemeine Java-Themen 4
G DBzugriff funktioniert nach 'Build Main Project' nicht mehr Allgemeine Java-Themen 2
P Exception in thread "main" java.lang.NoClassDefFou Allgemeine Java-Themen 3
P Exception in thread "main" java.lang.NoClassDefFou Allgemeine Java-Themen 15
P Exception in thread "main" java.lang.NoClassDefFou Allgemeine Java-Themen 3
S wie übergebe ich eine Variable aus einer Methode an main() ? Allgemeine Java-Themen 16
B Exception in thread "main" java.lang.OutOfMemoryEr Allgemeine Java-Themen 5
S Exception in thread "main" java.lang.StringIndexOu Allgemeine Java-Themen 9
R Ausführen von *.JAR || "Could not find main class" Allgemeine Java-Themen 7
I "Could not find the main class. Program will exit" Allgemeine Java-Themen 6
L boolean aus der main übergeben? Allgemeine Java-Themen 12
H jar-file in anderem main programm ausführen Allgemeine Java-Themen 2
M Klassenname in main-Methode ausgeben? Allgemeine Java-Themen 29
G Exception in thread "main" :? Allgemeine Java-Themen 5
E Exception in Thread "main" java.lang.NoClassDefFou Allgemeine Java-Themen 5
B Could not find the main class Allgemeine Java-Themen 2
A Was haltet ihr von einer standardisierten Main Klasse? Allgemeine Java-Themen 4
E Klasse dynamisch über main-Methode aufrufen Allgemeine Java-Themen 9
B Leere vererbte Interface-Methoden Allgemeine Java-Themen 8

Ähnliche Java Themen

Neue Themen


Oben