AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 706526
Accepted
Mahmoud Salah
Mahmoud Salah
Asked: 2022-06-18 01:11:09 +0800 CST2022-06-18 01:11:09 +0800 CST 2022-06-18 01:11:09 +0800 CST

如何获取java汇编指令

  • 772

在此 链接 rustyx中提到他使用调试虚拟机和以下标志-XX:+PrintOptoAssembly来获取他的 java 字节码的汇编指令

我安装了调试虚拟机sudo apt-get install openjdk-17-dbg

我使用命令java -XX:+UnlockDiagnosticVMOptions -XX:+PrintAssembly Main

我习惯于使用 gdb 在 C++ 中执行此操作,但无法使其与 java 一起使用 printAssembly 仅打印指令的十六进制值,如下例所示,它重复多次,没有我的实际代码函数或任何有意义的符号的迹象

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)


java
  • 1 1 个回答
  • 27 Views

1 个回答

  • Voted
  1. Best Answer
    Stephen Kitt
    2022-06-18T01:26:45+08:002022-06-18T01:26:45+08:00

    使用+PrintAssembly,您需要一个反汇编插件。如果您使用的是 Debian 或衍生产品,请安装libhsdis0-fcml.

    请注意,这openjdk-17-dbg不是调试 JDK;它是一个包含常规 JDK​​ 调试符号的包。

    • 1

相关问题

  • 如何获取pid号和它工作的文件夹

  • WebLogic 静默安装 JAR 引发非法参数错误

  • Java 拒绝在 Turnkey 上监听 IPv6

  • vmstat 如何考虑 Java 堆?

  • linux java -version 仅适用于 root 用户[关闭]

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve