直接獲取
自己編譯
How to build hsdis-amd64.dll and hsdis-i386.dll on Windows 這篇文章說明了如何在Windows系統(tǒng)下編譯hsdis缀雳,基本步驟如下:
- 安裝Cygwin榜轿,Cygwin的主要目的是通過重新編譯,將POSIX系統(tǒng)(例如Linux民假、BSD,以及其他Unix系統(tǒng))上的軟件(以 GNU 工具為代表)移植到Windows上潘鲫,具體安裝步驟
可參考Win下Cygwin的安裝捺疼,其中選擇安裝模塊的步驟中,一定要安裝Devel這個部分的模塊领铐,這個模塊包含了各種開發(fā)所用到的工具或模塊,最好全部安裝宋舷,以免后續(xù)流程出現(xiàn)各種奇怪問題 - 運(yùn)行Cygwin終端绪撵,在你的安裝目錄中會創(chuàng)建
\home\username
文件夾 - 下載binutils,
binutils-2.24.tar.bz2
或其它最新版本,解壓到主目錄\home\username
下 - 下載OpenJDK源碼祝蝠,選擇與您安裝的JRE版本對應(yīng)的標(biāo)記音诈,并單擊bz2幻碱。提取hsdis目錄(在src/share/tools中)到Cygwin主目錄
\home\username
- 在Cygwin終端,輸入
cd hsdis
- 獲取hsdis-amd64.dll细溅,輸入
make OS=Linux MINGW=x86_64-w64-mingw32 'AR=$(MINGW)-ar' BINUTILS=~/ BINUTILS -2.24
褥傍,獲取hsdis-i386.dll,輸入make OS=Linux MINGW=i686-w64-mingw32 'AR=$(MINGW)-ar' BINUTILS=~/ BINUTILS -2.24
喇聊。在這兩條命令中恍风,用你下載的binutils版本替換2.24 - 如果編譯成功的話,可以在
hsdis\build\Linux-amd64
或者hsdis\build\Linux-i586
目錄中找到我們想要的hsdis-amd64.dll和hsdis-i386.dll誓篱,將它放到JRE安裝目錄的bin\server
或者bin\client
文件夾即可
編譯錯誤解決
在第6步編譯提示
x86_64-w64-mingw32-gcc -o build/Linux-amd64/hsdis-amd64.dll -Ibuild/Linux-amd64/include -I/home/Administrator/binutils-2.24/include -I/home/Administrator/binutils-2.24/bfd -Ibuild/Linux-amd64/bfd -DLIBARCH_amd64 -DLIBARCH=\"amd64\" -DLIB_EXT=\".dll\" -O hsdis.c -shared build/Linux-amd64/bfd/libbfd.a build/Linux-amd64/opcodes/libopcodes.a build/Linux-amd64/libiberty/libiberty.a
build/Linux-amd64/bfd/libbfd.a(compress.o):compress.c:(.text+0x15):對‘compressBound’未定義的引用
build/Linux-amd64/bfd/libbfd.a(compress.o):compress.c:(.text+0x48):對‘compress’未定義的引用
build/Linux-amd64/bfd/libbfd.a(compress.o):compress.c:(.text+0x2a7):對‘inflateInit_’未定義的引用
build/Linux-amd64/bfd/libbfd.a(compress.o):compress.c:(.text+0x2e1):對‘inflate’未定義的引用
build/Linux-amd64/bfd/libbfd.a(compress.o):compress.c:(.text+0x2f0):對‘inflateReset’未定義的引用
build/Linux-amd64/bfd/libbfd.a(compress.o):compress.c:(.text+0x30f):對‘inflateEnd’未定義的引用
collect2: 錯誤:ld 返回 1
make: *** [Makefile:198:build/Linux-amd64/hsdis-amd64.dll] 錯誤 1
錯誤提示對‘compressBound’未定義的引用
指鏈接的時候沒有加上zlib的庫朋贬,需要添加-lz
后綴解決,打開hsdis下的Makefile文件窜骄,找到
$(TARGET): $(SOURCE) $(LIBS) $(LIBRARIES) $(TARGET_DIR)
$(CC) $(OUTFLAGS) $(CPPFLAGS) $(CFLAGS) $(SOURCE) $(DLDFLAGS) $(LIBRARIES)
在后面添加-static -lz
$(TARGET): $(SOURCE) $(LIBS) $(LIBRARIES) $(TARGET_DIR)
$(CC) $(OUTFLAGS) $(CPPFLAGS) $(CFLAGS) $(SOURCE) $(DLDFLAGS) $(LIBRARIES) -static -lz
然后锦募,在第6步執(zhí)行make命令,即可編譯成功