Bytecode eines Methodenaufrufs

Status
Nicht offen für weitere Antworten.
M

Mario_H

Gast
Hallo.

Ich ein Programm schreiben um zu überprüfen, ob in gegebenen .java-Dateien bestimmte Methoden aus anderen, ebenfalls gegeben, .java-Dateien aufgerufen werden.

Den Vollqualifizierten Namen der Methoden kann ich schon ermitteln, das Problem ist, einen Methodenaufruf zu qualifizieren:
Die zu einem aufrufenden Objekt gehörigen Klassen müssen anhand des Objektnamens, dem Rückgabewert einer Methode, etc. ermittelt werden. (Um Namensgleichheiten der Methoden auszuschließen. z.B. toString())
Die Verschiedenen Dateien eines Packages sowie die Imports müssen ebenfalls ausgewertet werden. Und zu guter letzt kommt noch die Vererbung dazu.
(Kurz gesagt.)


Meine Idee war, dem Compiler die ganze 'Zuordnungsarbeit' zu überlassen und anstelle der .java-Dateien den erzeugten Bytecode auszuwerten.
Da aber das einzige, das ich über Bytecode (in diesem Zusammenhang) weiß ist, dass Methoden und Klassennamen im Klartext dargestellt werden, muss ich leider um Hilfe bitten, wie denn ein so ein Methodenaufruf im Bytecode genau aussieht, und wie ich die zugehörige Klasse ermitteln kann.


Vielen Dank im Voraus.

Gruß Mario.
 
M

Mario_H

Gast
Ich habe auch noch eine alternative Idee.

Es geht darum, dass ich besagte Methoden aus dem Code entferne, wenn ich keine Datei finde, in denen sie aufgerufen werden.


Der andere Ansatz ist, ich entferne sie vorher, kompiliere, werte die Kompiler Errors aus und stell die Methoden ggf. wieder her.
Vorraussetzung ist, dass der Kompiler-Error aussagekräftig genug ist, um die Datei wiederzufinden, in der eine Methode wiederhergestellt werden muss.


Hat jemand ein bisschen ne Ahnung, welche Meldungen in dem Fall ausgegeben werden und/oder eine Referenz über die Compilerfehler?


Danke.
 

sparrow

Top Contributor
Das klingt ein wenig so als wenn du den Code "verbessern" möchtest, also aufräumen und optimieren.

Das klingt nach einem Obfuscator von denen du hier eine ganze Liste für Java findest.

Ich habe früher viel damit gearbeitet, allerdings nicht um das Decompilieren schwerer zu machen sondern weil ich Programme und Spiele für Handys geschrieben habe, und ein Obfuscator führt zu einer kleineren Klasse, das tut er unter anderem indem:

- Sämtliche Kommentare Kommentare und Debugging-Informationen gelöscht werden
- Methoden und Klassen umbenannt werden, und zwar in sehr kurze Namen (a, b, c...)
- Methoden auf Effektivität geprüft werden und nicht verwendete Methoden kurzerhand gelöscht werden.


Beste Grüße
Sparrow
 
M

Mario_H

Gast
Danke für den Tipp.

Ein Obfuscator war auch meine erste Idee.

Aber es geht darum als @deprecated deklarierte Methoden zu entfernen, sofern nicht doch noch gebraucht werden.
Und das in dem Code, mit dem auch später weitergearbeitet wird, also von wegen Kommentaren etc.

Das Auffinden und entfernen steht schon, das Problem war das erkennen ob so eine Methode nicht doch noch gebraucht wird.

Aber ich arbeite gerade an einem vielversprechenden Ansatz.
Ich lass mit vom Compiler mittels "-deprecation" sagen, welche deprecated-Methoden noch verwendet werden, alle anderen können raus. Ich denke das wird klappen.
 

SamHotte

Top Contributor
Wenn du die ganzen Quelltexte hast, lässt sich das doch bspw. in Eclipse einfach über die Suche lösen ...
 
M

Mario_H

Gast
Nein, diese Möglichkeiten hab ich im Vorfeld schon geprüft u.a. mit Hilfe dieses Forums.

Es dreht sich um mehrere Tausend .java-Dateien und Sinn meines Tools ist es eben nicht 'von Hand' jede Datei einzeln durchsuchen, Anfang finden, Ende Finde, <Entf.> drücken ;-) zu müssen..
 

Wildcard

Top Contributor
sparrow hat gesagt.:
- Methoden auf Effektivität geprüft werden und nicht verwendete Methoden kurzerhand gelöscht werden.
Welcher Obfuscator macht den sowas? Ziemlich ungünstig wenn man Reflection verwendet.... :autsch:
 

sparrow

Top Contributor
Wildcard hat gesagt.:
sparrow hat gesagt.:
- Methoden auf Effektivität geprüft werden und nicht verwendete Methoden kurzerhand gelöscht werden.
Welcher Obfuscator macht den sowas? Ziemlich ungünstig wenn man Reflection verwendet.... :autsch:

Jeder Obfuscator der den Code auch auf Größe trimmt.
Gerade bei Handys wo teileise die .jar-Archive nur wenige kb groß sein dürfen ist es ganz hilfreich durch so etwas Größe zu sparen.

Methoden die als public deklariert sind werden natürlich ausgenommen, diese werden auch nicht umbenannt.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Tool mit dem man die Major version im Bytecode patchen kann..? Allgemeine Java-Themen 10
S Wird bei den JREs 9, 10, 11+ ueberhaupt noch Bytecode ausgefuehrt..? Allgemeine Java-Themen 8
F Java Bytecode lesen Allgemeine Java-Themen 5
stroggi Bytecode LCMP - Verständnisproblem Allgemeine Java-Themen 3
T Bytecode a7 Allgemeine Java-Themen 10
N ClassLoader - Laden von Bytecode aus einer Datenbank Allgemeine Java-Themen 6
MQue Bytecode ansehen Allgemeine Java-Themen 13
L Hat sich der Bytecode von 1.5 nach 1.6 geändert? Allgemeine Java-Themen 25
R Klammern im Bytecode Allgemeine Java-Themen 11
G Bytecode zu Java-Opcode. Allgemeine Java-Themen 4
S Static + Speicher + Bytecode etc. Brauche HILFE :/ Allgemeine Java-Themen 11
M Bytecode mit Java-Programm erzeugen lassen Allgemeine Java-Themen 20
S was wird optimiert ? klassen, bytecode oder interpreter? Allgemeine Java-Themen 12
O regulärer Ausdruck zum durchsuchen eines Strings verwenden Allgemeine Java-Themen 2
T Rotationswinkel eines Bildes bestimmen Allgemeine Java-Themen 4
C Probleme beim Erstellen eines runnable-jar files Allgemeine Java-Themen 1
J JavaScript innerhalb eines Java Projekts ausführen Allgemeine Java-Themen 2
Encera Größe eines Objektes in Byte berechnen Allgemeine Java-Themen 2
8u3631984 Prüfen ob min. ein Element eines Sets in einem anderen Set enh Allgemeine Java-Themen 4
M Array Rang eines Elements Allgemeine Java-Themen 4
OnDemand Teile eines Links entfernen Allgemeine Java-Themen 6
H Auslesen eines (LDAP-)Attributs in Active Directory Allgemeine Java-Themen 2
W JSON parsen eines ,mit JS.stringify erstellten Strings Allgemeine Java-Themen 27
H Textposition eines gedrehten Textes verschieben Allgemeine Java-Themen 8
berserkerdq2 run-methode eines Threads so programmieren, dass 30x die Sekunde etwas ausgeführt wird. Allgemeine Java-Themen 44
E Ersetzen eines Bildes in der Kopfzeile eines Word-Docx-Dokuments mit Apache POI XWPF Allgemeine Java-Themen 0
N Fahrtrichtung eines selbstfahrenden Auto ändern Allgemeine Java-Themen 3
T Letztes Zeichen eines Strings enfernen Allgemeine Java-Themen 14
S Übergabe eines Sortierkriteriums für ein Artikel Array mittels BiPredicate<Artikel, Artikel> Allgemeine Java-Themen 13
gotzi242 Schatzsuche mithilfe eines O(log n) Algorithmus Allgemeine Java-Themen 2
C Koordinaten LONG/LAT eines neuen Punktes in bestimmter Entfernen und Winkel berechnen Allgemeine Java-Themen 3
Tobero Meine Funktion für das beinhalten eines Punktes in einem Kreis funktioniert nicht Allgemeine Java-Themen 5
LimDul Direktes return eines Array geht nicht Allgemeine Java-Themen 20
S Mittelwert anhand eines Stream berechnen Allgemeine Java-Themen 5
kodela Breite eines erweiterten Monitors feststellen Allgemeine Java-Themen 5
R Zeilen eines 2d Arrays abwechselnd links und rechts mit Nullen auffüllen Allgemeine Java-Themen 14
Zrebna Alternative Darstellung eines Codesnippets Allgemeine Java-Themen 33
kodela Inhalt eines Arrays ändert sich mysteriös Allgemeine Java-Themen 2
bueseb84 Wget mit Wildcards - oder wie lädt man bei JFrog die letzte Version eines Artifacts herunter Allgemeine Java-Themen 3
N Erkennen eines Programs Allgemeine Java-Themen 2
N Pausieren eines Programmes Allgemeine Java-Themen 4
D Input/Output Implementierung eines CommandHandlers/Parsers für viele Eingaben Allgemeine Java-Themen 26
M Gibt es eine API die den aktuellen Wert eines Indikators beim Trading zurückgibt? Allgemeine Java-Themen 7
F Wie bekommt man alle Filenamen eines Webserver Verzeichnisses Allgemeine Java-Themen 6
A Fehler beim Öffnen eines Projekts Allgemeine Java-Themen 6
N Eigenschaften eines Buttons per Setter verändern Allgemeine Java-Themen 5
S Ausfuehrung eines Programms aufzeichnen..? Allgemeine Java-Themen 4
X Ermittlung eines doppelte Paars mit Streams Allgemeine Java-Themen 50
Stonie Prüfen von direkter Implementierung eines Interfaces Allgemeine Java-Themen 7
S Vorbereitung eines Praktikums Allgemeine Java-Themen 4
H Aufruf eines Web Service anhand übergebenen Parameter Allgemeine Java-Themen 2
M Weiterleiten von empfangenen Nachrichten eines StompSessionHandlers Allgemeine Java-Themen 1
J Programm zum Suchen eines Wortes im Dateisystem Allgemeine Java-Themen 4
H Rename eines Projekts Allgemeine Java-Themen 1
J Fenstergröße eines anderen Programmes auslesen Allgemeine Java-Themen 9
ReinerCoder auf Klassen innerhalb eines package zugreifen Allgemeine Java-Themen 22
Meeresgott Erste Schritte Sourcetree - Git | Suchen eines Commits Allgemeine Java-Themen 2
E Status eines USB Mikrofon abfragen Allgemeine Java-Themen 2
DaCrazyJavaExpert OOP Ansätze und Tipps zum Porgrammieren eines Taschenrechners Allgemeine Java-Themen 25
A OOP Problem beim Berechnen der größten Fläche eines Ringes Allgemeine Java-Themen 19
JavaNewbie2.0 Start eines Anderen Programm erkennen Allgemeine Java-Themen 6
I Verbindung eines Java-Plugins mit Webserver Allgemeine Java-Themen 3
L Auswertung eines Testes funktioniert nicht Allgemeine Java-Themen 37
G Iteratoren - Wie kann man mithilfe von Iteratoren nur jeden zweiten Wert eines TreeSets ausgeben? Allgemeine Java-Themen 4
GreenTeaYT Elemente eines 2Dim LinkedList von links nach rechts ausgeben? Allgemeine Java-Themen 0
B Spalten eines 2d-Arrays Allgemeine Java-Themen 2
M Rechenprogramm eines wissenschaftlichen Taschenrechners Allgemeine Java-Themen 4
S Eigenschaften (hier Verknüpfung) eines Files lesen Allgemeine Java-Themen 2
E Typüberprüfung eines chars Allgemeine Java-Themen 5
H Hilfe bei Erstellung eines Hilfe Fenster bei Tastendruck (F1 bei Win98) Allgemeine Java-Themen 5
T Teile eines Double-Wertes verändern Allgemeine Java-Themen 2
R Rückgabe eines Arrays durch Funktion Allgemeine Java-Themen 9
H Datentypen Typ eines Arrays überprüfen Allgemeine Java-Themen 9
RalleYTN DPI eines Bildes ändern Allgemeine Java-Themen 4
N Methoden Methoden einer Klasse auf Grundlage eines Strings aufrufen Allgemeine Java-Themen 6
K Bestimmten Bereich eines Strings lesen Allgemeine Java-Themen 6
C -Verschiedene Versionen eines Programms verwalten Allgemeine Java-Themen 7
O Datentypen Erstellung eines Containers, der verschachtelte Map-Strukturen beherbergen kann Allgemeine Java-Themen 0
A einmalige Ausführung eines Methodenabschnittes Allgemeine Java-Themen 3
F CPU Last eines Thread ausfindig machen Allgemeine Java-Themen 0
L Menge der Buchstaben eines Textes zählen Allgemeine Java-Themen 3
F Teil eines Bildes laden Allgemeine Java-Themen 1
Neumi5694 Operatoren regEx für das Erstellen eines Strings verwenden Allgemeine Java-Themen 3
P Löschen eines keys in einer SortedMap Allgemeine Java-Themen 5
RalleYTN Input/Output URL eines Zip Entry? Allgemeine Java-Themen 2
S Alle Methodenaufrufe eines Threads notieren..? Allgemeine Java-Themen 7
J NullPointerExeption bei Inizialisierung eines Arrays Allgemeine Java-Themen 3
I Setzen und Lesen eines Objektes (Enum?) Allgemeine Java-Themen 10
L Implementierung eines AVT-Baums Allgemeine Java-Themen 2
D Größe der Zahlenkombinationen eines Arrays begrenzen Allgemeine Java-Themen 3
D Objekt entlang eines Funktionsgraphens bewegen Allgemeine Java-Themen 6
B Existenz eines Files max 30 sec prüfen Allgemeine Java-Themen 5
U Koordinaten alle Pixel eines Dreiecks zeichnen ausgeben Allgemeine Java-Themen 5
P Wie funktioniert das Feedback eines Klicks auf eine Java GUI Allgemeine Java-Themen 10
thet1983 nach teilen eines Dateinamens suchen Allgemeine Java-Themen 6
T Bezeichnung eines Objektes mit String/int kombinieren Allgemeine Java-Themen 3
Z Auswerten eines eingegeben Termes Allgemeine Java-Themen 13
X Registrierung eines Ecore-Models außerhalb der Eclipse-Umgebung Allgemeine Java-Themen 0
R Instanzen eines Programms Allgemeine Java-Themen 8
I Arbeitsmaterialien eines Softwareentwicklers? Allgemeine Java-Themen 7

Ähnliche Java Themen

Neue Themen


Oben