查看 class 文件
实战情况
k8s + springcloud 项目
打包依赖版本问题
更新了模块 A
依赖的 模块 B 打的jar包
,但是镜像 A
打包时,没有 mvn clean install 更新依赖包 B 或者 模块 A 在 mvn clean install 之前,没有对 B 包进行 mvn clean deploy
,导致 A 镜像依赖的 B 包 不对
查看镜像中的jar包
从服务器上下载 镜像
kubectl get po -n namespace pod_name -o yaml 得到pod 使用的镜像名
docker save 镜像名 /保存到服务器的目录/test.tar
用 scp 或者 mobaxterm 拖到win本地
查看 tar 包
用 winrar / 360压缩
打开tar 包
查看class文件
Java| 编译和反编译
配置环境变量
反编译工具
JD-GUI 很好用!!!!
JD-GUI
是一个用C++ 开发的 Java反编译工具
,由 Pavel Kouznetsov开发,支持Windows、Linux和苹果Mac Os三个平台。而且提供了Eclipse平台下的插件JD-Eclipse。JD-GUI 基于GPLv3开源协议,对个人使用是完全免费的
。JD-GUI主要的是提供了可视化操作,直接拖拽文件到窗口既可,
效果图如下
JAVAP
javap
是jdk自带
的一个工具,可以对代码反编译
,也可以查看java编译器生成的字节码
。javap和其他两个反编译工具最大的区别是他生成的文件并不是java文件
,也不像其他两个工具生成代码那样更容易理解。拿一段简单的代码举例,如我们想分析Java 7中的switch是如何支持String的,我们先有以下可以编译通过的源代码:
public class switchDemoString {public static void main(String[] args) {String str = "world";switch (str) {case "hello":System.out.println("hello");break;case "world":System.out.println("world");break;default:break;}}
}
cmd 或者 bash 输入
javac Decompilation.java 编译
javap -c Decompilation.class 反编译
bash 中可以 用 javap -c Decompilation.class | grep 查找特定值
cmd 中 javap -c Decompilation.class | findstr 值
反编译 class 文件Compiled from "Decompilation.java"
public class Decompilation {public Decompilation();Code:0: aload_01: invokespecial #8 // Method java/lang/Object."<init>":()V4: returnpublic static void main(java.lang.String[]);Code:0: ldc #16 // String world2: astore_13: aload_14: dup5: astore_26: invokevirtual #18 // Method java/lang/String.hashCode:()I9: lookupswitch { // 299162322: 36113318802: 48default: 82}36: aload_237: ldc #24 // String hello39: invokevirtual #26 // Method java/lang/String.equals:(Ljava/lang/Object;)Z42: ifne 6045: goto 8248: aload_249: ldc #16 // String world51: invokevirtual #26 // Method java/lang/String.equals:(Ljava/lang/Object;)Z54: ifne 7157: goto 8260: getstatic #30 // Field java/lang/System.out:Ljava/io/PrintStream;63: ldc #24 // String hello65: invokevirtual #36 // Method java/io/PrintStream.println:(Ljava/lang/String;)V68: goto 8271: getstatic #30 // Field java/lang/System.out:Ljava/io/PrintStream;74: ldc #16 // String world76: invokevirtual #36 // Method java/io/PrintStream.println:(Ljava/lang/String;)V79: goto 8282: return
}
javap
并没有将字节码反编译成java文件
,而是生成了一种我们可以看得懂字节码
。其实javap生成的文件仍然是字节码
,只是程序员可以稍微看得懂一些
JAD
JAD
是一个比较不错的反编译工具,只要下载 jad
,就可以实现对class文件的反编译了。还是上面的源代码,使用jad反编译后内容如下:
jad Decompilation.class
会生成一个Decompilation.jad的文件
// Decompiled by Jad v1.5.8g. Copyright 2001 Pavel Kouznetsov.
// Jad home page: http://www.kpdus.com/jad.html
// Decompiler options: packimports(3)
// Source File Name: Decompilation.javapackage com.yveshe;
import java.io.PrintStream;public class Decompilation
{public Decompilation(){}public static void main(String args[]){String str = "world";String s;switch((s = str).hashCode()){default:break;case 99162322: if(s.equals("hello"))System.out.println("hello");break;case 113318802: if(s.equals("world"))System.out.println("world");break;}}
}
看上面的代码这不就是标准的java的源代码么。这个就很清楚的可以看到原来字符串的switch是通过equals()和hashCode()方法来实现的。
PS: 但是,由于JAD已经很久不更新了
在对Java7生成的字节码进行反编译时,偶尔会出现不支持的问题
在对Java 8的lambda表达式反编译时就彻底失败
idea
直接把 class 文件拖动到 idea 窗口
查看 class 文件相关推荐
- windows用 tree命令查看目录文件夹结构
windows用 tree命令查看目录文件夹结构 ## 查看帮助 tree --helptree --dirsfirst --filelimit 6 -h -t –dirsfirst 目录优先展示 – ...
- objdump查看目标文件构成
objdump objdump是用查看目标文件或者可执行的目标文件的构成的GCC工具 反汇编 #objdump -d cpuid2 对于其中的反汇编代码 左边是机器指令的字节,右边是反汇编结果.显然, ...
- 【Ubuntu】dpkg-deb -c :查看deb文件中的内容
1.dpkg-deb -c :查看deb文件中的内容 $ dpkg-deb -c package eg: $ dpkg-deb -c sogoupinyin_2.2.0.0108_amd64.deb ...
- 利用adb命令查看apk文件包名的一些方法
利用adb命令查看apk文件包名的一些方法 前提是已经下载android SDK并配好环境变量! 在控制台输入命令$adb shell pm 可以看到adb shell pm的相关用法,详细信息请自己 ...
- linux查看特定文件的位置
ubuntu如何查看特定文件的位置呢 这里我想更改一个依赖库的源码,但是不知道安装位置,命令如下: locate +文件名 locate pygad.py 结果如下: 即可.
- 《Adobe Acrobat DC经典教程》—第1章1.11节在阅读模式下查看PDF文件
本节书摘来自异步社区<Adobe Acrobat DC经典教程>一书中的第1章1.11节在阅读模式下查看PDF文件,作者[美]Lisa Fridsma(丽莎 弗里斯玛) , Brie Gy ...
- 查看linux文件的权限:ls -l 文件名称
查看linux文件的权限:ls -l 文件名称 查看linux文件夹的权限:ls -ld 文件夹名称(所在目录) 修改文件及文件夹权限: sudo chmod -(代表类型)×××(所有者)×××(组 ...
- 查看binlog文件的2种方式
2019独角兽企业重金招聘Python工程师标准>>> 查看binlog文件的2种方式 1.使用show binlog events a.获取binlog文件列表 mysql> ...
- [Android Pro] linux下查看一个文件的属性(ls,lsattr,file,stat)
reference to : http://blog.chinaunix.net/uid-28458801-id-4615294.html 查看文件属性有多种方法,且这些方法中偏向不同,具体如下: 1 ...
- [文章存档]Kudu 的 Debug Console 窗口如何查看更多文件
链接:https://docs.azure.cn/zh-cn/articles/azure-operations-guide/app-service-web/aog-app-service-web-h ...
最新文章
- ubuntu14.04LTS openssh-server 手动安装配置步骤
- HelloCharts-android 之饼状图的使用
- Android开发之选项菜单(optinosMenu)
- 在抽象类中可以没有抽象方法_是否可以在最终课程中使用抽象方法?
- Java-异常02 捕获和抛出异常
- Objective-C的self.用法的一些总结
- 计算机英语讲课笔记07
- 机器视觉:下一代相机高速接口
- vue store的值刷新就被覆盖解决方案
- H3CSE20200603班-SSL V*N
- BS7799、ISO/IEC 17799、ISO/IEC 27001的联系与区别
- 《创业维艰》:如何完成比难更难的事
- JavaScript求和函数
- Nginx代理百度地图离线瓦片
- struts2配置细节
- H3C无线AP 瘦模式转胖模式 fit转fat
- 大数据知识的基本介绍,大数据的特点主要包含哪几个?
- 三星Galaxy S21系列5G手机竟成了《天赐的声音》舞台上最亮的星?
- IMEI、IMEISV
- `MD`语法技巧Typora
热门文章
- Centos下如何永久修改系统时间 hwclock
- 大数据发展促进委员会在京成立
- 华泰单因子测试之换手率类因子
- 我的世界服务器创世神文件夹,我的世界服务器怎么给创世神权限的指令
- 我的世界服务器神秘修改节点,我的世界神秘节点指令 | 手游网游页游攻略大全...
- 雷电模拟总是显示android启动,雷电模拟器启动失败如何解决?启动失败解决方法图文分享...
- 用matlab画标准雷电波,雷电波发生器的MATLAB仿真及参数选取sc
- 基于准则匹配的图像对准
- 力扣739:每日温度【C++】
- 便利店的选址有什么诀窍吗?需要掌握哪些选址技巧?