背景
为了体验《深入理解Java虚拟机》第三版里面提到的的hsdis反编译工具。
目标
在之前编译OpenJDK 12的基础上构建适用Windows平台的hsdis工具,即hsdis.dll(备注:实际名称带有架构信息,比如64位版本的hsdis-amd64.dll,32位版本的hsdis-i386.dll)。
环境准备
OpenJDK 12源码
选择以下任一方法,
- 使用Mercurial clone源码,
hg clone http://hg.openjdk.java.net/jdk/jdk
- 下载源码包。
本文用的是OpenJDK12+33/OpenJDK12-ga,下载的是tar.gz包
md5sum : 760bdd74283e89940f850beb9897bb78
sha1sum : d04d49b05d3152697321b7f98156172233f63b14
下载完成后,建议对比一下md5和sha1摘要,对比主要是为了检查文件是否完整,如果文件不完整,后面执行构建的时候,可能会提示莫名其妙的错误。
binutils
下载binutils 2.32源码,https://ftp.gnu.org/gnu/binutils/binutils-2.32.tar.gz
工具链
公共部分
因为之前配置过OpenJDK 12的环境,所以这里列出来的可能不是最小工具集。
我用的是cygwin 3.3.3-1
,安装了下面的包,
autoconf 15-1
make 4.2.1-2
zip 3.0-12
unzip 6.0-17
texinfo 6.7-1
64位
我使用的是mingw64-x86_64-gcc-core 10.2.0-1
工具链。
32位
我使用的是mingw64-i686-gcc-core 10.2.0-1
工具链。
构建
64位
构建前需要修改src\utils\hsdis\Makefile
,需要做2处修改,如下,
# 修改前,189-202行
BINUTILSDIR = $(shell cd $(BINUTILS);pwd)
endif
CPPFLAGS += -I$(BINUTILSDIR)/include -I$(BINUTILSDIR)/bfd -I$(TARGET_DIR)/bfd
CPPFLAGS += -DLIBARCH_$(LIBARCH) -DLIBARCH=