Home > Blockchain >  java printAssembly flag is printing no assembly instructions
java printAssembly flag is printing no assembly instructions

Time:06-17

In this Link rustyx mentioned that he used a debug virtual machine and the following flag -XX: PrintOptoAssembly to get the assembly instructions of his java bytecode

I installed the debug virtual machine with sudo apt-get install openjdk-17-dbg

I use the command java -XX: UnlockDiagnosticVMOptions -XX: PrintAssembly Main

I am used to do it in C with gdb but Can't get it to work with java the printAssembly only prints hex values of the instructions like the below sample, it's repeated multiple times with no sign of my actual code functions or any meaningful symbols

abstract class Base {
    Base(){
        System.out.println("Base Constructor Called");
    }
    abstract void fun();
}
class Dervied extends Base {
    Dervied(){
        System.out.println("Dervied Constructor called");
    }
    void fun(){
        int x = 0;
        x = x   1;
        System.out.println("Dervied fun() called "   x);
    }
}

class Main {
    public static void main(String args[]){
        Dervied d = new Dervied();
        d.fun();
    }
}

     32    1       3       java.lang.Object::<init> (1 bytes)

============================= C1-compiled nmethod ==============================
----------------------------------- Assembly -----------------------------------

Compiled method (c1)      32    1       3       java.lang.Object::<init> (1 bytes)
 total in heap  [0x00007fca25878010,0x00007fca25878320] = 784
 relocation     [0x00007fca25878170,0x00007fca258781a0] = 48
 main code      [0x00007fca258781a0,0x00007fca25878280] = 224
 stub code      [0x00007fca25878280,0x00007fca258782b0] = 48
 metadata       [0x00007fca258782b0,0x00007fca258782c0] = 16
 scopes data    [0x00007fca258782c0,0x00007fca258782d8] = 24
 scopes pcs     [0x00007fca258782d8,0x00007fca25878318] = 64
 dependencies   [0x00007fca25878318,0x00007fca25878320] = 8

[Constant Pool (empty)]

[MachCode]
[Entry Point]
  # {method} {0x0000000800448920} '<init>' '()V' in 'java/lang/Object'
  #           [sp 0x40]  (sp of caller)
  0x00007fca258781a0: 448b 5608 | 49bb 0000 | 0000 0800 | 0000 4d03 | d34c 3bd0 

  0x00007fca258781b4: ;   {runtime_call ic_miss_stub}
  0x00007fca258781b4: 0f85 c6a5 | abff 660f | 1f44 0000 
[Verified Entry Point]
  0x00007fca258781c0: 8984 2400 | c0fe ff55 | 4883 ec30 

  0x00007fca258781cc: ;   {metadata(method data for {method} {0x0000000800448920} '<init>' '()V' in 'java/lang/Object')}
  0x00007fca258781cc: 48bf 1888 | 801c ca7f | 0000 8b9f | f400 0000 | 83c3 0289 | 9ff4 0000 | 0081 e3fe | 0700 0083 
  0x00007fca258781ec: fb00 0f84 

  0x00007fca258781f0: ;*return {reexecute=0 rethrow=0 return_oop=0}
                      ; - java.lang.Object::<init>@0 (line 44)
  0x00007fca258781f0: 1300 0000 | 4883 c430 

  0x00007fca258781f8: ;   {poll_return}
  0x00007fca258781f8: 5d49 3ba7 | 4003 0000 | 0f87 1f00 

  0x00007fca25878204: ;   {metadata({method} {0x0000000800448920} '<init>' '()V' in 'java/lang/Object')}
  0x00007fca25878204: 0000 c349 | ba20 8944 | 0008 0000 | 004c 8954 | 2408 48c7 | 0424 ffff 

  0x00007fca2587821c: ;   {runtime_call counter_overflow Runtime1 stub}
  0x00007fca2587821c: ffff e8dd 

  0x00007fca25878220: ; ImmutableOopMap {rsi=Oop }
                      ;*synchronization entry
                      ; - java.lang.Object::<init>@-1 (line 44)
  0x00007fca25878220: 6ab6 ffeb 

  0x00007fca25878224: ;   {internal_word}
  0x00007fca25878224: cf49 baf9 | 8187 25ca | 7f00 004d | 8997 5803 

  0x00007fca25878234: ;   {runtime_call SafepointBlob}
  0x00007fca25878234: 0000 e9c5 | 0eac ff90 | 9049 8b87 | d003 0000 | 49c7 87d0 | 0300 0000 | 0000 0049 | c787 d803 
  0x00007fca25878254: 0000 0000 | 0000 4883 

  0x00007fca2587825c: ;   {runtime_call unwind_exception Runtime1 stub}
  0x00007fca2587825c: c430 5de9 | 9c01 b6ff | f4f4 f4f4 | f4f4 f4f4 | f4f4 f4f4 | f4f4 f4f4 | f4f4 f4f4 | f4f4 f4f4 
  0x00007fca2587827c: f4f4 f4f4 
[Exception Handler]
  0x00007fca25878280: ;   {no_reloc}
  0x00007fca25878280: e87b 31b6 

  0x00007fca25878284: ;   {external_word}
  0x00007fca25878284: ff48 bf6a | 7482 41ca | 7f00 0048 

  0x00007fca25878290: ;   {runtime_call}
  0x00007fca25878290: 83e4 f0e8 | 080a ae1b 

  0x00007fca25878298: ;   {section_word}
  0x00007fca25878298: f449 ba99 | 8287 25ca | 7f00 0041 

  0x00007fca258782a4: ;   {runtime_call DeoptimizationBlob}
  0x00007fca258782a4: 52e9 f600 | acff f4f4 | f4f4 f4f4 
[/MachCode]
     34    2       3       java.lang.String::hashCode (60 bytes)


CodePudding user response:

You need the HotSpot disassembler plugin hsdis-amd64.so and put it on the shared library search path.

You can build it from sources or get a prebuilt binary from here or here.

  • Related