重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
理论上说计算机运行的程序都可以被反汇编的。但java这类程序就不一样了~~~java程序运行在java虚拟机(jvm)里由java虚拟机和操作系统进行交互操作。java源文件在编译成*.class时,java源代码被编译成类似计算机汇编代码的java汇编代码(也就是 Java字节码),这时java虚拟机就像cpu一样可以“运行java汇编代码”所以java的类并不是计算机是机器指令而是由jvm解译成机器指令运行的。
创新互联专注于企业网络营销推广、网站重做改版、青云谱网站定制设计、自适应品牌网站建设、html5、商城网站开发、集团公司官网建设、外贸营销网站建设、高端网站制作、响应式网页设计等建站业务,价格优惠性价比高,为青云谱等各大城市提供网站开发制作服务。
下面有几种方法:
方法一:生成asm文件
1)VS2005:
项目 ---》属性 ---》 配置属性 ---》 c/c++ ---》 输出文件 ---》 右边内容项:汇编输出 ---》带源代码的程序集(/FAs )。
这样在项目里面生成后缀为*.asm 的文件。里面还有注释,有利于分析。
要得到汇编代码与源代码的对应,设置选项:
2)VC6.0:
project settings:
--- C++
--- category == Listing files
---Listing file type == Assembly with source code
方法二:使用反汇编方式(推荐使用这种方法,在debug的时候使用)
1)VC6.0在进行断点调试的时候,进行以下步骤:
点击“查看”
“调试窗口”
“Disassably”
即可查看到反汇编的结果
2)VS2005在进行断点调试的时候,进行以下步骤:
点击“调试”
“窗口”
“反汇编”
查看java就直接用javap -v 类文件.class 即可。详细内容可以参考 jvm虚拟机
汇编是除了机器语言外的最底层的语言,java是面向对象的语言,是属于最高级的语言之一了,与汇编语言差的太多。完全不是同一个东西,连相似的地方都几乎没有。
至于java的底层是用什么实现的就不好说了,估计java 的底层应该也是使用的与汇编相似的语言写的,那么多复杂的类应该会有一种比较高效的机制来处理。
那个不是汇编。。。是反编译工具无法识别的字节码(bytecodes,java中间代码),因为无法识别,自然只能直接把字节码打出来给你看了。
你多试几种反编译工具,并不是所有的都会出的,也不是所有的都在同一个地方出。这个取决于反编译工具的作者对字节码的理解。