— linux — 1 min read
一般都是将java
代码编译成字节码class
文件打包成war
或者jar部署到服务端,如果使用
Tocmat部署
War包,
Tomcat部署后会自动解压一个以
War包名的文件夹,里面包含了
java的
class`文件以及静态资源和配置文件。
在服务端下查看class文件,如果直接用Vim
等编辑器打开默认显示的是二进制乱码。如果要以十六进制查看class文件则需要使用对应的工具,GNU/Linux
下可以使用xxd
命令,将二进制信息转换为十六进制数据:
1$ xxd foo.class bar.txt
生成的bar.txt
里面保存了class
文件的十六进制,就可以通过编辑器直接打开查看。
但是这样会显得比较麻烦,如果能直接用编辑器打开查看就方便多了。
vim除了查看文件外,还可以在vim编辑器内调用外部命令:
首先用vim直接打开class
文件,结果是二进制乱码。接着使用Vim
调用外部的xdd
命令:
切换到命令模式,即按Esc键,输入:%!xxd
,即可以查看十六进制的class
的字节码。
如果需要还原为二进制内容则输入:%!xxd -r
,即可以退出十六进制查看的方式。
其他Vim
命令:
1:%!xxd :%!od 将当前文本转化为16进制格式2:%!xxd -c 12 每行显示12个字节
但是使用%!xxd
进行十六进制显示时,文件头显示为3f3f 3f3f,3f的ascii码是?
,这可以和Vim
解析时乱码有关系。因为上面通过xxd foo.class bar.txt
查看文件是正常显示java
的标识cafe babe
的。由于我配置了Vim
的自定义配置文件.vimrc
,其中包含set fileencodings=utf-8,gb2312,gbk,gb18030,ucs-bom
,所以class
的文件头cafe babe
不是任何一个中文的编码,vim找不到对应的中文字,就显示为??`,即:3f3f。
直接使用vim -u NONE -N class名称
,然后再配合:%!xxd
命令就可以正常显示十六进制的文件头cafe babe
了。
vim -u NONE -N
即Vim
启动不加载vimr
配置并且禁用vi
兼容模式。