Arthas jad(字节码文件反编译成源代码 )

news2024/12/25 1:07:54

在这里插入图片描述

文章目录

  • 二、命令列表
    • 2.2 class/classloader相关命令
      • 2.2.1 jad(字节码文件反编译成源代码 )
        • 举例1:反编译指定的函数 :jad com.hero.lte.ems.sysmanager.cache.SMTaskCache executeTask
        • 举例2:反编绎时只显示源代码(默认情况下,反编译结果里会带有ClassLoader信息)
        • 举例3:反编译时不显示行号
        • 举例4:反编译时指定 ClassLoader

二、命令列表

2.2 class/classloader相关命令

2.2.1 jad(字节码文件反编译成源代码 )

提示:

jad 命令将 JVM 中实际运行的 class 的 byte code 反编译成 java 代码,便于你理解业务逻辑

参数说明:

参数名称参数说明
class-pattern类名表达式匹配
[c:]类所属 ClassLoader 的 hashcode
[classLoaderClass:]指定执行表达式的 ClassLoader 的 class name
[E]开启正则表达式匹配,默认为通配符匹配
举例1:反编译指定的函数 :jad com.hero.lte.ems.sysmanager.cache.SMTaskCache executeTask

基本用法
jad 全路径类名 方法名

[arthas@24056]$ jad com.hero.lte.ems.sysmanager.cache.SMTaskCache executeTask

ClassLoader:                                                                                                                                                                                                                            
+-sun.misc.Launcher$AppClassLoader@18b4aac2                                                                                                                                                                                             
  +-sun.misc.Launcher$ExtClassLoader@232204a1                                                                                                                                                                                           

Location:                                                                                                                                                                                                                               
/home/ems/ems_eam/app/ems-eam-sysmanager-server-1.0-SNAPSHOT.jar                                                                                                                                                                        

        /*
         * WARNING - Removed try catching itself - possible behaviour change.
         */
        public static void executeTask(Long sysTaskId, Date nextTime) {
            try {
/*233*/         lock.writeLock().lock();
/*234*/         Long curTime = System.currentTimeMillis();
/*235*/         for (SmconfigDmTaskMain smconfigdmtaskmain : taskCache) {
/*237*/             if (!smconfigdmtaskmain.getSysTaskId().equals(sysTaskId)) continue;
/*240*/             if (smconfigdmtaskmain.getSysTaskEndTime() != null && smconfigdmtaskmain.getSysTaskEndTime().getTime() <= curTime) {
/*241*/                 smconfigdmtaskmain.setSysTaskState(SMTaskStatusEnum.PASTDUE.getCodeString());
/*242*/                 smconfigdmtaskmain.setTaskSwitch(SMTaskSwitchEnum.INVALID.getCode());
                    } else {
/*244*/                 smconfigdmtaskmain.setSysTaskState(SMTaskStatusEnum.EXECUTING.getCodeString());
/*245*/                 smconfigdmtaskmain.setTaskSwitch(SMTaskSwitchEnum.ACTIVE.getCode());
                    }
/*247*/             smconfigdmtaskmain.setSysTaskNextTime(nextTime);
                }
            }
            finally {
/*253*/         lock.writeLock().unlock();
            }
        }

Affect(row-cnt:1) cost in 1003 ms.
[arthas@24056]$
举例2:反编绎时只显示源代码(默认情况下,反编译结果里会带有ClassLoader信息)

默认情况下,反编译结果里会带有ClassLoader信息,通过--source-only选项,可以只打印源代码。方便和mc/retransform命令结合使用。

基本用法
jad --source-only 全路径类名 方法名

[arthas@24056]$ jad --source-only com.hero.lte.ems.sysmanager.cache.SMTaskCache executeTask
        /*
         * WARNING - Removed try catching itself - possible behaviour change.
         */
        public static void executeTask(Long sysTaskId, Date nextTime) {
            try {
/*233*/         lock.writeLock().lock();
/*234*/         Long curTime = System.currentTimeMillis();
/*235*/         for (SmconfigDmTaskMain smconfigdmtaskmain : taskCache) {
/*237*/             if (!smconfigdmtaskmain.getSysTaskId().equals(sysTaskId)) continue;
/*240*/             if (smconfigdmtaskmain.getSysTaskEndTime() != null && smconfigdmtaskmain.getSysTaskEndTime().getTime() <= curTime) {
/*241*/                 smconfigdmtaskmain.setSysTaskState(SMTaskStatusEnum.PASTDUE.getCodeString());
/*242*/                 smconfigdmtaskmain.setTaskSwitch(SMTaskSwitchEnum.INVALID.getCode());
                    } else {
/*244*/                 smconfigdmtaskmain.setSysTaskState(SMTaskStatusEnum.EXECUTING.getCodeString());
/*245*/                 smconfigdmtaskmain.setTaskSwitch(SMTaskSwitchEnum.ACTIVE.getCode());
                    }
/*247*/             smconfigdmtaskmain.setSysTaskNextTime(nextTime);
                }
            }
            finally {
/*253*/         lock.writeLock().unlock();
            }
        }

[arthas@24056]$ 
举例3:反编译时不显示行号

基本用法
jad --source-only 全路径类名 方法名 --lineNumber false

--lineNumber 参数默认值为 true,显示指定为 false 则不打印行号。

[arthas@24056]$ jad --source-only com.hero.lte.ems.sysmanager.cache.SMTaskCache executeTask --lineNumber false
/*
 * WARNING - Removed try catching itself - possible behaviour change.
 */
public static void executeTask(Long sysTaskId, Date nextTime) {
    try {
        lock.writeLock().lock();
        Long curTime = System.currentTimeMillis();
        for (SmconfigDmTaskMain smconfigdmtaskmain : taskCache) {
            if (!smconfigdmtaskmain.getSysTaskId().equals(sysTaskId)) continue;
            if (smconfigdmtaskmain.getSysTaskEndTime() != null && smconfigdmtaskmain.getSysTaskEndTime().getTime() <= curTime) {
                smconfigdmtaskmain.setSysTaskState(SMTaskStatusEnum.PASTDUE.getCodeString());
                smconfigdmtaskmain.setTaskSwitch(SMTaskSwitchEnum.INVALID.getCode());
            } else {
                smconfigdmtaskmain.setSysTaskState(SMTaskStatusEnum.EXECUTING.getCodeString());
                smconfigdmtaskmain.setTaskSwitch(SMTaskSwitchEnum.ACTIVE.getCode());
            }
            smconfigdmtaskmain.setSysTaskNextTime(nextTime);
        }
    }
    finally {
        lock.writeLock().unlock();
    }
}

[arthas@24056]$ 
举例4:反编译时指定 ClassLoader

提示:

当有多个 ClassLoader 都加载了这个类时,jad 命令会输出对应 ClassLoader 实例的 hashcode,然后你只需要重新执行 jad 命令,并使用参数 -c <hashcode> 就可以反编译指定 ClassLoader 加载的那个类了;

基本用法
jad 全路径类名

$ jad org.apache.log4j.Logger

Found more than one class for: org.apache.log4j.Logger, Please use jad -c hashcode org.apache.log4j.Logger
HASHCODE  CLASSLOADER
69dcaba4  +-monitor's ModuleClassLoader
6e51ad67  +-java.net.URLClassLoader@6e51ad67
            +-sun.misc.Launcher$AppClassLoader@6951a712
            +-sun.misc.Launcher$ExtClassLoader@6fafc4c2
2bdd9114  +-pandora-qos-service's ModuleClassLoader
4c0df5f8  +-pandora-framework's ModuleClassLoader

Affect(row-cnt:0) cost in 38 ms.
$ jad org.apache.log4j.Logger -c 69dcaba4

ClassLoader:
+-monitor's ModuleClassLoader

Location:
/Users/admin/app/log4j-1.2.14.jar

package org.apache.log4j;

import org.apache.log4j.spi.*;

public class Logger extends Category
{
    private static final String FQCN;

    protected Logger(String name)
    {
        super(name);
    }

...

Affect(row-cnt:1) cost in 190 ms.

对于只有唯一实例的 ClassLoader 还可以通过--classLoaderClass指定 class name,使用起来更加方便:

--classLoaderClass 的值是 ClassLoader 的类名,只有匹配到唯一的 ClassLoader 实例时才能工作,目的是方便输入通用命令,而-c <hashcode>是动态变化的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2168680.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PCIe扫盲(14)

系列文章目录 PCIe扫盲&#xff08;一&#xff09; PCIe扫盲&#xff08;二&#xff09; PCIe扫盲&#xff08;三&#xff09; PCIe扫盲&#xff08;四&#xff09; PCIe扫盲&#xff08;五&#xff09; PCIe扫盲&#xff08;六&#xff09; PCIe扫盲&#xff08;七&#xff09…

如何查看电脑的虚拟内存信息?

1、按下键盘的 win R 键 &#xff0c; 输入&#xff1a;cmd &#xff0c; 然后按下【回车】 2、在弹出的窗口输入&#xff1a;systeminfo &#xff0c; 然后按下【回车】&#xff0c;等待加载结果出来。 3、如下位置&#xff0c;显示的即是当前电脑的【虚拟内存】信息&…

Fusion Access

1.FA桌面云需要微软三剑客 2.AD&#xff0c;DNS&#xff0c;DHCP合并部署在一台虚机&#xff0c;内存配置8G 3.FA各个组件 3.1终端接入 3.2接入和访问控制层 3.3虚拟桌面管理层-桌面云规划及部署 3.4安装Linux基础架构虚拟机FA01 3.4.1安装Tools 3.4.2安装FusionAccess组件&am…

希捷电脑硬盘好恢复数据吗?探讨可能性、方法以及注意事项

在数字化时代&#xff0c;数据已成为我们生活和工作中不可或缺的一部分。希捷电脑硬盘作为数据存储的重要设备&#xff0c;承载着大量的个人文件、工作资料以及珍贵回忆。然而&#xff0c;面对硬盘故障或误操作导致的数据丢失&#xff0c;许多用户不禁要问&#xff1a;希捷电脑…

找到你的工具!5款免费可视化报表工具对比分析

选择合适的可视化工具对于分析和展示数据至关重要&#xff0c;以下是五款免费的可视化工具&#xff0c;它们各具特色&#xff0c;能够适应各种需求。本文将介绍每款工具的优势与不足&#xff0c;帮助你找到最合适的解决方案。 1. 山海鲸可视化 介绍&#xff1a;山海鲸可视化是…

UniApp组件与微信小程序组件对照学习

UniApp只是一个第三方的开发工具&#xff0c;借鉴各种平台的能力&#xff0c;UniApp的组件也借鉴了微信小程序的组件&#xff0c;我们学习时&#xff0c;可以进行对照学习&#xff0c;我们在用UniApp开发微信小程序时&#xff0c;UniApp也只是将代码转成了微信小程序的代码&…

“电瓶车火灾”频发,如何防范自救

1.概述 近年来&#xff0c;随着电动自行车使用的普及化&#xff0c;由此引发的起火事故频繁发生。作为上海市烧伤急救中心&#xff0c;上海交通大学医学院附属瑞金医院的灼伤整形科收治的此类病人数量也在逐年上升。电动自行车&#xff0c;已经成为一种新型火灾事故的“肇事者…

【Docker】02-数据卷

1. 数据卷 数据卷(volume) 是一个虚拟目录&#xff0c;是容器内目录与宿主机目录之间映射的桥梁。 2. 常见命令 docker volume createdocker volume lsdocker volume rmdocker volume inspect 查看某个数据卷的详情docker volume prune 清除数据卷 **数据卷挂载&#xff1a…

【笔记】数据结构|链表算法总结|快慢指针场景和解决方案|链表归并算法和插入算法|2012 42

受堆积现象直接影响的是&#xff1a;平均查找长度 产生堆积现象&#xff0c;即产生了冲突&#xff0c;它对存储效率、散列函数和装填因子均不会有影响&#xff0c;而平均查找长度会因为堆积现象而增大。 2012 42 参考灰灰考研 假定采用带头结点的单链表保存单词&#xff0c;当…

MySQL_表_进阶(1/2)

我们的进阶篇中&#xff0c;还是借四张表&#xff0c;来学习接下来最后关于表的需求&#xff0c;以此完成对表的基本学习。 照例给出四张表&#xff1a; 学院表&#xff1a;(testdb.dept) 课程表&#xff1a;(testdb.course) 选课表:&#xff08;testdb.sc&#xff09; 学生表…

JS面试真题 part7

JS面试真题 part7 31、web常见的攻击方式有哪些&#xff1f;如何防御32、说说JavaScript中内存泄漏的几种情况33、JavaScript如何实现继承34、说说JavaScript数字精度丢失的问题&#xff0c;如何解决35、举例说明你对尾递归的理解&#xff0c;有哪些应用场景 31、web常见的攻击…

使用kaggle命令下载数据集和模型

点击用户头像&#xff0c;点击Settings&#xff1a; 找到API&#xff0c;点击create new token&#xff0c;将自动下载kaggle.json&#xff1a; 在用户目录下创建.kaggle文件夹&#xff0c;并将下载的kaggle.json文件移动到该文件夹&#xff1a; cd ~ mv Downloads/kaggle.j…

Universal Link配置不再困扰,Xinstall来帮忙

在移动互联网时代&#xff0c;App的推广和运营至关重要。而Universal Link作为一种能够实现网页与App间无缝跳转的技术&#xff0c;对于提升用户体验、引流至App具有显著效果。今天&#xff0c;我们就来科普一下Universal Link的配置方法&#xff0c;并介绍如何通过Xinstall这款…

2024-2025华为ICT大赛报名|赛前辅导|学习资料

华为ICT大赛是华为公司打造的面向全球高校的年度ICT赛事&#xff0c;大赛以“联接、荣耀、未来”为主题&#xff0c;协同政府、高等教育机构、培训机构和行业企业&#xff0c;促进高校ICT人才培养、成长和就业&#xff0c;助力ICT人才生态繁荣。2021年3月&#xff0c;大赛成功入…

Linux Centos7达梦8数据库安装说明(附安装包,超详细图文!)收藏这一篇就够了!

VMWare17&Linux Centos7&达梦数据库8.4 使用说明 1.导语 1.1说明文档编写思路 小伙伴们,在自己电脑上搞起来啊&#xff0c;随便安装Linux环境&#xff0c;也不用担心搞错配置搞坏环境&#xff0c;大不了重装Linux系统。hahahhhhhhhhhh 由于本地没有合适的Linux环境进行…

AIGAME平台的由来与未来展望 —— 蒙特加密基金推动区块链与AI融合创新

摘要&#xff1a; AIGAME平台凭借蒙特加密产业基金的战略投资&#xff0c;成为区块链与AI融合创新的先驱。该平台集成了链游、DeFi、加密聊天和跨境支付等多项功能&#xff0c;打造出一个多元化的Web3生态系统。未来&#xff0c;AIGAME将在技术创新和全球布局中持续引领潮流。 …

JavaScript 学习

一、输出 为方便调试可以输出内容&#xff0c;但是用户是看不到的。要在开发者模式中看。 console . log ( "Hello" )&#xff1b; 二、外部文件引用 可以直接在html中写JS <head> <meta charset"utf-8"> <script> console.log("he…

微服务——服务保护(Sentinel)(一)

1.雪崩问题 级联失败或雪崩问题指的是在微服务架构中&#xff0c;由于服务间的相互依赖和调用&#xff0c;当一个服务出现故障时&#xff0c;会引起调用它的服务也出现故障&#xff0c;进而引发整个调用链路的多个服务都出现故障&#xff0c;最终导致整个系统崩溃的现象。 产生…

Redis配置文件详解(上)

一、Redis的核心配置文件 redis.conf是redis的核心配置文件&#xff0c;位于redis解压后目录的根目录&#xff0c;配置文件的内容根据不同的功能划分为多个模块。redis的注释信息写得也是非常详细的&#xff0c;以下是对部分重要得配置做简单的分析 二、基础配置信息 这部分…

CTF ciscn_2019_web_northern_china_day1_web1复现

ciscn_2019_web_northern_china_day1_web1 复现&#xff0c;环境源于CTFTraining 分析 拿到题目扫描&#xff0c;发现没有什么有用资产 扫描过程中注册账号登录&#xff0c;发现上传入口 上传文件&#xff0c;发现下载删除行为&#xff0c;寻找功能点&#xff0c;发现不能访问…