Domanda

Sto tentando di utilizzare la libreria engineering di codice Java byte ASM per eseguire l'analisi statica. Ho la situazione in cui mi piacerebbe ispezionare le variabili di essere assegnato a un campo.

Ho MethodVisitor che implementa il metodo visitFieldInsn(). Sono in particolare cercando il comando putfield. Questo non è un problema. Il problema è che quando incontro putfield, voglio essere in grado di accedere alla variabile che sta per essere assegnato al campo. In particolare voglio accedere alle informazioni relative al tipo della variabile.

Al momento ho davvero solo bisogno di guardare a ciò che è in cima alla pila, ma se c'è un modo più generale per ispezionare che è ancora meglio.

C'è un modo con ASM per ispezionare le variabili nello stack?

È stato utile?

Soluzione

Prima di tutto, se si può supporre che bytecode è valido, il tipo di valore assegnato a un campo deve corrispondere al tipo di campo, che potete leggere in anticipo utilizzando ClassReader API.

Tuttavia, se avete bisogno di tenere traccia di dove ogni singolo valore su una pila o fessura variabile per data puntatore all'istruzione provenienza, è possibile utilizzare l'API Analyzer con SourceInterpreter. In sostanza si permetterebbe di trovare istruzioni che ha prodotto determinato valore ed è possibile utilizzare le informazioni relative che l'istruzione di dedurre un tipo (ad esempio, se si legge da una variabile, che corrisponde a un parametro di metodo o se il valore stato restituito da una chiamata di metodo, così sia dei casi è possibile ottenere il tipo di metodo di descrittore). Si veda anche il mio vecchio post sul blog che ha un di utilizzo SourceInterpreter .

Altri suggerimenti

Non ho familiarità con ASM, ma ho fatto qualcosa che suona simile con il framework Eclipse Java AST. Per conoscere le variabili, ho dovuto tenere traccia delle dichiarazioni di variabili me stesso nel visitX appropriata () i metodi del visitatore AST. Non è stato molto difficile una volta ho saputo che i nodi AST corrispondevano alle dichiarazioni di variabili.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top