Пиша персонализиран детектор във Findbugs. Искам да знам дали има някакъв начин, по който мога да следя ASTORE и съответната инструкция ALOAD? Тоест, ако ASTORE 3 се появи в моя байткод, искам първо да идентифицирам, че това е инструкция ASTORE, а след това нейния индекс (в този случай: 3 ) и потърсете инструкция ALOAD със същия индекс (в този случай инструкция ALOAD 3).
Например в байт кода, показан по-долу, искам да прочета инструкцията ASTORE 8 (показва се на ред #29) и да видя дали има някаква инструкция ALOAD с индекс 8. Т.е., ALOAD 8 (което може да се види на ред #73).
29: astore 8
31: aload_1
32: iconst_0
.
.
.
.
.
.
60: ldc #54 // String number
62: aload 11
64: invokeinterface #56, 3 // InterfaceMethod javax/servlet/http/HttpSession.setAttribute:(Ljava/lang/String;Ljava/lang/Object;)V
69: aload 12
71: aload 7
73: aload 8
75: invokeinterface #62, 3 // InterfaceMethod com/ibm/itim/ws/services/WSSessionService.getNumber:(Ljava/lang/String;Ljava/lang/String;)Lcom/ibm/itim/ws/model/WSSession;
80: astore 14
Освен това, ако намеря съответната инструкция ALOAD, тогава искам да проверя кой метод е извикан. Което знам, че може да се провери с помощта на метода sawOpcode(), както е показано:
if (seen == INVOKEINTERFACE){...}
Накратко, искам да направя нещо подобно:
псевдокод
public void sawOpcode(int seen) {
if (seen == ASTORE){
//code to identify its index i; i.e, ASTORE i
if(seen == ALOAD_i){
//if the corresponding ALOAD instruction is found...
if(seen == INVOKEINTERFACE){
// Identify the method invoked
}
}
Не знам дали горният подход е правилен.
ALOAD 1. LDC "name". INVOKEINTERFACE. ASTORE 7
. Сега искам да проследя този ASORE 7, за да намеря ALOAD 7. @Tagir - person Manoj   schedule 02.06.2015