是 Java 这种通过 JVM 来运行的应用程序,运行堆栈用的都是 JVM 内置的函数和堆栈管理。所以,从系统层面你只能看到 JVM 的函数堆栈,而不能直接得到 Java 应用程序的堆栈。
perf_events 实际上已经支持了 JIT,但还需要一个 /tmp/perf-PID.map 文件,来进行符号翻译。当然,开源项目 perf-map-agent 可以帮你生成这个符号表。
此外,为了生成全部调用栈,你还需要开启 JDK 的选项 -XX:+PreserveFramePointer。因为这里涉及到大量的 Java 知识,我就不再详细展开了。如果你的应用刚好基于 Java ,[……]

Read more

# 配置文件位置
「Apache/Maven/Settings Reference」
The Maven install: ${maven.home}/conf/settings.xml A user’s install: ${user.home}/.m2/settings.xml
# 打包时跳过指定项目
「How do I exclude certain modules from a Maven build using the commandline」
Maven 3.2.1+ 打包时使用选项:-pl “!<modulename>,!<mo[……]

Read more

Apache Maven 3.5.2 on CentOS Linux release 7.4.1708 (Core)
# 07/30/2019

# 默认的版本是Maven 3.0.5
yum install -y maven

关于最新版本
如果要使用最新版本的 MAVEN 工具,需要下载官方的包,没有可以直接使用的 RPM 包。
还有一种做法是使用 Fedora 的源(不推荐,但是安装这个包问题不大):

wget -O /etc/yum.repos.d/epel-apache-maven.repo \
http://repos[……]

Read more

# 官方仓库 https://mvnrepository.com/
# 阿里云镜像 http://maven.aliyun.com/nexus/content/repositories/snapshots/ (不支持浏览) https://maven.aliyun.com/mvn/view (仅用作浏览)
# 私有仓库 – 如果你使用Nexus搭建了私有仓库,在「Repository Path」列显示的是地址。[……]

Read more

TODO JAVA中的字体配置
系统环境:Debian 其他环境:JAVA 8
字体配置文件的位置
多个 JDK 版本的 fontconfig.properties 配置文件: 1)JDK 8u73/jre/lib/fontconfig.properties.src 2)JDK 8u73/jre/lib/fontconfig.SuSE.10.properties.src
如果你安装的是JRE,那配置文件的位置为:/path/to/jre/lib/fontconfig.properties 如果你使用的是JDK,那配置文件的路径为:/path/to/JDK/jre/l[……]

Read more

AWT是什么?
AWT是操作系统GUI代码到Java的接口。尽管它尝试着在每个系统上都以相同的方式工作,但实际上多少都有所出入。
AWT是Abstract Window ToolKit (抽象窗口工具包)的缩写,这个工具包提供了一套与本地图形界面进行交互的接口。AWT中的图形函数与操作系统所提供的图形函数之间有着一一对应的关系,我们把它称为peers。 也就是说,当我们利用AWT来构件图形用户界面的时候,我们实际上是在利用操作系统所提供的图形库。由于不同操作系统的图形库所提供的功能是不一样的,在一个平台上存在的功能在另外一个平台上则可能不存在。为了实现Java语言所宣称的”一次编[……]

Read more

字节码文件反编译工具
没有用户界面的命令行工具 Krakatau CFR FernFlower JAD Mocha
有用户界面的工具 JD-GUI
既有命令行又有用户界面的工具 JADX
反汇编及汇编器
Krakatau
调试工具
JavaSnoop
ODB – Omniscient Debugger
性能分析工具
JProbe Suite Optimizelt Suite JProfiler
混淆工具
KLASSMASTER PROGUARD RETROGUARD DASH-O JSHRINK
JAVA字节码[……]

Read more

Krakatau是什么?
Krakatau是作用于Java字节码文件的工具,它包含了三个工具:反编译器、反汇编器和汇编器。
安装Krakatau工具
系统环境依赖
对于反编译器,需要Python 2.7,同时反编译可能需要安装JDK。 对于反汇编和,Python 2.7和Python 3都可以。对于反汇编和汇编,JDK并不是必须的。但是测试汇编器生成的类时,会比较有用。
执行安装
没有什么可安装的的,把源码从GitHub的仓库上拉下来就好了,然后加入环境变量。去Krakatau的GitHub仓库。
安装的可执行程序
assemble.py 汇编器。[……]

Read more

assemble.py,汇编器。完全支持JAVA8。
命令行语法格式(Usage)
python assemble.py [-out OUT] [-r] [-q] target
命令支持的选项及含义
OUT 汇编生成的class文件的输出目录。默认为当前目录。 如果名字以.zip或者.jar结尾,则会输出一个zip文件。
-r 将汇编所有在target指定的目录中(递归)找到的.j文件。
-q 安静模式,只显示错误和警告。
target 要进行汇编处理的文件或者目录。 如果使用了-r选项,target应该是一个目录。
注意(NOTE)[……]

Read more

decompile.py,反编译器。只支持JAVA7,没有JAVA8,也没有JAVA6。尤其是lambdas的反编译。
Usage
python Krakatau\decompile.py [-nauto] [-path PATH] [-out OUT] [-r] [-skip]

target

PATH : An optional list of directories, jars, or zipfiles to search for

classes in. Krakatau will attempt to automatically[……]

Read more

disassemble.py,反汇编器。完全支持JAVA8。
命令行语法格式(Usage)
python disassemble.py [-out OUT] [-r] [-roundtrip] target
命令描述
该命令将class文件转化为可读的汇编格式。不像javap命令,该工具可以反汇编不正常的class文件,然后输出内容可以重新汇编。
与assemble.py一起,该工具可以通过汇编将任何类进行。将任何class转到等价的Class中。
如果给出了-roundtrip选项,那么它可以通过汇编来回处理有效的类,并准确地再现原始的二进制类文件。[……]

Read more

javasnoop是一个java应用程序安全测试工具,它允许你以拦截的方法,篡改数据和 hack运行在你计算机上的java应用程序。通常在没有源代码的情况下,测试java客户端的安全性最好的结果是不可预知的,最坏的结果是不切实际的。 在有源代码的情况下,你可以运行一个简单的java程序和远程附加一个调试器调试它,单步运行、根据需要改变变量,但对于一个applet来说要想做到这 一点是有点困难的。有时,你可能需要修改客户端和服务器之间的通信,一般的做法是在客户端配置一个代理,在代理上修改数据。问题的关键是,通信的数据通常 不是明文的,它可能使用了自定义的协议、序列化的对象、加密的数据或者多种方式[……]

Read more

Applet和Java Web Start应用程序默认配置运行在严格的沙箱中。显然内部类和私有域的修改通常是不被允许的。这意味着我们必须将安全性“关闭”。JavaSoop中提供的startup.bat文件实现了这个需求,我们需要使用startup.bat来运行JavaSnoop。
该批处理文件将实现以下功能: 1.检查环境变量JAVA_HOME的值是否包含JDK1.6的路径 2.关闭JavaSnoop的安全性 3.启动JavaSnoop工具 4.退出工具后,再次将Java安全性恢复为安全浏览
将JavaSnoop”附加”到进程中
JavaSnoop工具提供了两种注入进程的方[……]

Read more

软件介绍
ODB是一个Java调试器,这个调试器可以“倒退时间”回溯程序的执行过程。
软件信息
作者:Bil Lambda 简介:http://omniscientdebugger.github.io/ODBDescription.html 手册:http://omniscientdebugger.github.io/ODBUserManual.html 介绍:http://www.cs.kent.edu/~farrell/mc08/lectures/progs/pthreads/Lewis-Berg/odb/AADEBUG_Mar_03.pdf
参考文献
ODB[……]

Read more