Reverse Engineering for Beginners

(avery) #1

CHAPTER 54. JAVA CHAPTER 54. JAVA


7: iload_1
8: iload_2
9: invokestatic #2 // Method max:(II)I
12: istore_3
13: iload_1
14: iload_2
15: invokestatic #3 // Method min:(II)I
18: istore 4
20: getstatic #4 // Field java/lang/System.out:Ljava/io/⤦
ÇPrintStream;
23: iload 4
25: invokevirtual #5 // Method java/io/PrintStream.println:(I)V
28: getstatic #4 // Field java/lang/System.out:Ljava/io/⤦
ÇPrintStream;
31: iload_3
32: invokevirtual #5 // Method java/io/PrintStream.println:(I)V
35: return

Arguments are passed to the other function in the stack, and the return value is left onTOS.


54.10Bitfields


All bit-wise operations work just like in any otherISA:


public static int set (int a, int b)
{
return a | 1<<b;
}

public static int clear (int a, int b)
{
return a & (~(1<<b));
}

public static int set(int, int);
flags: ACC_PUBLIC, ACC_STATIC
Code:
stack=3, locals=2, args_size=2
0: iload_0
1: iconst_1
2: iload_1
3: ishl
4: ior
5: ireturn

public static int clear(int, int);
flags: ACC_PUBLIC, ACC_STATIC
Code:
stack=3, locals=2, args_size=2
0: iload_0
1: iconst_1
2: iload_1
3: ishl
4: iconst_m1
5: ixor
6: iand
7: ireturn

iconst_m1loads− 1 in the stack, it’s the same as the0xFFFFFFFFnumber. XORing with0xFFFFFFFFhas the same
effect of inverting all bits (A.6.2 on page 889).


Let’s extend all data types to 64-bitlong:


public static long lset (long a, int b)
{
return a | 1<<b;
}
Free download pdf