4 Stimmen

Abrufen der Arrayref für Stack-Operanden in Java Bytecode

Ich arbeite mit ASM-API für Java-Bytecode-Instrumantation, und ich möchte in der Lage sein, zu bestimmen, welches Array (durch den Namen des Arrays) in jedem Zugriff auf ein Array zugegriffen wird.

Ich habe zwei Probleme damit: - Nehmen wir zum Beispiel die iastore-Instruktion. Die arrayref befindet sich im Operandenstapel unter zwei anderen Variablen - value und index. Wie bekomme ich die arrayref ohne den Stack zu ruinieren (ich kann nicht mehr als zwei Top-Variablen im Stack duplizieren)? Ich dachte daran, index und value vom Stack zu nehmen und sie irgendwo zu speichern und dann die arrayref zu holen und schließlich index und value zurück auf den Stack zu schieben, aber ich weiß nicht wirklich, wie man das macht...

  • Ich möchte von der arrayref (sobald ich es habe) den Namen des Arrays (der Name, dass der Benutzer deklariert, dass Array es genannt) zu erhalten.

vielen Dank im Voraus.

1 Stimmen

Was meinen Sie mit "Name des Arrays"?

0 Stimmen

Sie können die Variablennamen aus der Klassendatei entnehmen. Allerdings können viele Variablen (lokale und Mitgliedsvariablen) auf dasselbe Array-Objekt verweisen. Welchen Variablennamen möchten Sie also?

0 Stimmen

Ich meine den Namen dieses Arrays im Original-Java-Programm. Danke

0voto

Kohsuke Kawaguchi Punkte 3457

dup2_x1, pop2, dup_x2 und Sie haben nun arrayref an der Spitze des Stapels. Aber im Allgemeinen ist es einfacher, lokale Variablen zu verwenden und das Endergebnis nach JIT sollte nicht anders sein.

Wie bereits von anderen bemerkt, ergibt der 2. Teil der Frage nicht viel Sinn. Objekte sind in Variablen nicht notwendig, und Sie können ein Array zuweisen und verwenden, ohne es jemals in einer Variablen zu speichern.

Aber ich vermute, dass Sie den Zugang verfolgen wollen wie x[0]=1 und dies x zuordnen, und das kann durch die Datenflussanalyse erreicht werden. Sie verfolgen aload und wo diese Werte verwendet werden, und wenn sich herausstellt, dass Ihr arrayref direkt von aload stammt, wissen Sie, dass das Array von einer Variablen kam.

0 Stimmen

Danke! Dies ist wirklich meine Absicht, aber ich sehe nicht, was Sie meinen, durch:" wenn Ihre arrayref stellt sich heraus, dass gerade von aload". könnten Sie bitte erklären, dass?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X