Re: Incorrect Parameter Order

Rob Kenworthy <[email protected]> Sat, 2 Dec 2017 02:46:03 +0000
Newsgroups gmane.comp.java.objectweb.asm
Message-ID <DM3PR18MB0634CFFF7217ACCC2F77EFFBD23E0@DM3PR18MB0634.namprd18.prod.outlook.com>
Hi, perhaps the easiest way for you to figure this out is to compile the code you desire...

trace{System.out.println(b+ " " + d);}

...and run Asmifier against it.

Rob





Sent from my Samsung device


-------- Original message --------
From: "ThanhVu (Vu) Nguyen" <[email protected]>
Date: 2017-12-01 6:30 PM (GMT-05:00)
To: [email protected]
Subject: [asm] Incorrect Parameter Order

I want to instrument a function to print out its parameter values
For example,  void trace(b,d){}   becomes  void trace{System.out.println(b+ " " + d);}

And trace is invoked from another function, e.g.,
foo(){
   int a = 0;
   int b = 1;
   int c = 2;
   int d = 3;
   trace(b,d);
}

So after the instrument I want the program to print
1 3  when running foo

I wrote some code for ASM to do it, but I did it wrong because it always print
0 1  (i.e., . the values of a and b.  I suspect I didn't use the correct arg index, but I am not sure how to make it right.

Essentially my code contains a loop in visitMethodInsn that prints something like

mv.visitFieldInsn(GETSTATIC, "java/lang/System", "out", "Ljava/io/PrintStream;");
mv.visitTypeInsn(NEW, "java/lang/StringBuilder");
mv.visitInsn(DUP);
mv.visitMethodInsn(INVOKESPECIAL, "java/lang/StringBuilder", "<init>", "()V", false);
mv.visitVarInsn(ILOAD, 0);   //load index 0
mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/StringBuilder", "append", "(I)Ljava/lang/StringBuilder;", false);
mv.visitLdcInsn(" ");
 mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/StringBuilder", "append", (Ljava/lang/String;)Ljava/lang/StringBuilder;", false);
mv.visitVarInsn(ILOAD, 1);   //load index 1
mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/StringBuilder", "append", "(I)Ljava/lang/StringBuilder;", false);
mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/StringBuilder", "toString", "()Ljava/lang/String;", false);
mv.visitMethodInsn(INVOKEVIRTUAL, "java/io/PrintStream", "println", "(Ljava/lang/String;)V", false);

....
}


-- 
You receive this message as a subscriber of the [email protected] mailing list.
To unsubscribe: mailto:[email protected]
For general help: mailto:[email protected]?subject=help
OW2 mailing lists service home page: http://www.ow2.org/wws