java运行汇编_如何检查Java代码的汇编输出?

Java使用字节码.根据链接的Oracle文档,最相似的是javap,javap命令反汇编一个或多个类文件.其输出取决于所使用的选项.

package com.stackoverflow;

class Main {

public static void main(String[] args) {

System.out.println("Hello, World!");

}

}

如果我将其编译为Main.class,然后运行javap -v Main.class,则会得到

Classfile /home/efrisch/workspace/StackOverflow/bin/com/stackoverflow/Main.class

Last modified Jun 18, 2015; size 553 bytes

MD5 checksum de4f987e783aa0f145e7245269504028

Compiled from "Main.java"

class com.stackoverflow.Main

minor version: 0

major version: 52

flags: ACC_SUPER

Constant pool:

#1 = Class #2 // com/stackoverflow/Main

#2 = Utf8 com/stackoverflow/Main

#3 = Class #4 // java/lang/Object

#4 = Utf8 java/lang/Object

#5 = Utf8

#6 = Utf8 ()V

#7 = Utf8 Code

#8 = Methodref #3.#9 // java/lang/Object."":()V

#9 = NameAndType #5:#6 // "":()V

#10 = Utf8 LineNumberTable

#11 = Utf8 LocalVariableTable

#12 = Utf8 this

#13 = Utf8 Lcom/stackoverflow/Main;

#14 = Utf8 main

#15 = Utf8 ([Ljava/lang/String;)V

#16 = Fieldref #17.#19 // java/lang/System.out:Ljava/io/PrintStream;

#17 = Class #18 // java/lang/System

#18 = Utf8 java/lang/System

#19 = NameAndType #20:#21 // out:Ljava/io/PrintStream;

#20 = Utf8 out

#21 = Utf8 Ljava/io/PrintStream;

#22 = String #23 // Hello, World!

#23 = Utf8 Hello, World!

#24 = Methodref #25.#27 // java/io/PrintStream.println:(Ljava/lang/String;)V

#25 = Class #26 // java/io/PrintStream

#26 = Utf8 java/io/PrintStream

#27 = NameAndType #28:#29 // println:(Ljava/lang/String;)V

#28 = Utf8 println

#29 = Utf8 (Ljava/lang/String;)V

#30 = Utf8 args

#31 = Utf8 [Ljava/lang/String;

#32 = Utf8 SourceFile

#33 = Utf8 Main.java

{

com.stackoverflow.Main();

descriptor: ()V

flags:

Code:

stack=1, locals=1, args_size=1

0: aload_0

1: invokespecial #8 // Method java/lang/Object."":()V

4: return

LineNumberTable:

line 3: 0

LocalVariableTable:

Start Length Slot Name Signature

0 5 0 this Lcom/stackoverflow/Main;

public static void main(java.lang.String[]);

descriptor: ([Ljava/lang/String;)V

flags: ACC_PUBLIC, ACC_STATIC

Code:

stack=2, locals=1, args_size=1

0: getstatic #16 // Field java/lang/System.out:Ljava/io/PrintStream;

3: ldc #22 // String Hello, World!

5: invokevirtual #24 // Method java/io/PrintStream.println:(Ljava/lang/String;)V

8: return

LineNumberTable:

line 5: 0

line 6: 8

LocalVariableTable:

Start Length Slot Name Signature

0 9 0 args [Ljava/lang/String;

}

SourceFile: "Main.java"

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值