扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
从语法级别上不提供对汇编内嵌的支持,不过,如果确实需要,可以借助于JNI,它可以调用C/C++代码,这样你可以间接地嵌入汇编代码。
成都创新互联公司-专业网站定制、快速模板网站建设、高性价比桑植网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式桑植网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖桑植地区。费用合理售后完善,10年实体公司更值得信赖。
简单回答:据我所知,在当前应该办不到。
相关知识:
1、当前的JAVA,运行机制是调用JAVA支持环境提供的功能调用。它不是真正的二进制机器码。可以说,它的运行过程是基于边解释边运行的。所以,从运行效率与速度上去体验与感受,常会感觉它编写的程序运行速度偏慢。它注重跨平台,只要操作系统上安装好JAVA运行环境,它就有可能正常运行。所以,同一个JAVA系统,它可能可以在安装有JAVA运行环境的win中运行,也有可能在安装有JAVA运行环境的linux、安卓、苹果系统中运行。
2、而C++编写的程序经编译后,生成的是二进制机器码,直接向系统底层发送指令,调用系统底层功能。所以,它生成的程序的运行速度相对快。但是一般已生成的程序只能在针对性的系统上运行。
3、因为两种编程的底层理念完全是不同的,所以让C++中嵌入JAVA,基本上是不可能的事。
4、顺便说,C++中嵌入汇编的机理是,先将C++编写的语句转译为二进制代码,再将汇编语言片段转译为二进制代码,这些代码构件存成的文件就是所谓的obj文件,最后将这些代码按一定的规则组装起来,就成了可执行程序。再补充:因为JAVA是边解释边运行的东西,所以,无法转译为二进制代码,所以要是嵌入的话,以上过程无法实现。
下面有几种方法:
方法一:生成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虚拟机
有一定区别~ 一般编译型语言的程序叫反编译~ 解释型语言的程序叫反汇编~ 用IDA的一个插件可以做到反汇编一些程序的到源代码的~
从语法级别上不提供对汇编内嵌的支持,不过,如果确实需要,可以借助于JNI,它可以调用C/C++代码,这样你可以间接地嵌入汇编代码。
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class LinkListT
{
ListLinkData list=new ArrayListLinkData();
public void addObject(T t)
{
insertObject(list.size(),t);
}
public void insertObject(int index,T t)
{
LinkData data=new LinkData(t);
list.add(list.size(),data);
if(list.get(index-1)!=null)
{
LinkData prD=list.get(index-1);
prD.setNextValue(data);
}
if(list.get(index+1)!=null)
{
LinkData neD=list.get(index-1);
data.setNextValue(neD);
}
}
public void deleteObject(int index)
{
LinkData prD=null;
LinkData neD=null;
if(list.get(index-1)!=null)
{
prD=list.get(index-1);
}
if(list.get(index+1)!=null)
{
neD=list.get(index-1);
}
if(prD!=null)
{
prD.setNextValue(neD);
}
list.remove(index);
}
public void sort()
{
Collections.sort(list);
}
}
class LinkDataT implements ComparableT
{
private T value=null;
private LinkData nextValue=null;
public LinkData(T o)
{
this.value=o;
}
public T getValue()
{
return value;
}
public void setValue(T value)
{
this.value=value;
}
public LinkData getNextValue()
{
return nextValue;
}
public void setNextValue(LinkData nextValue)
{
this.nextValue=nextValue;
}
@Override
public int compareTo(T o)
{
char c1=o.toString().charAt(0);
char c2=this.toString().charAt(0);
return c1-c2;
}
}
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流