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