用Dalvik指令集写个java类

Dalvik指令集

.class public LCalculate;#定义类名

.super Ljava/lang/Object;#定义父类

.method public static main([Ljava/lang/String;)V#申明静态main()方法,L表示这是一个类

.registers 5   #方法中使用5个寄存器

.prologue  #代码起始指令

nop #空指令

nop

nop

nop

new-instance v0, LCalculate;   #构造一个Calculate实例

invoke-direct{v0},LCalculate;-><init>()V      #调用构造函数

sget-object v1,Ljava/lang/System;->out:Ljava/io/PrintStream;  #静态字段操作指令

const/4 v2,0x5      #将5存入寄存器V2

const/4 v3,0x3     #将3存入寄存器V3

invoke-virtual{v0,v2,v3},LCalculate;->foo(II)I  #调用LCalculate实例foo虚函数(V0为隐式的LCalculate对象引用,后面二个是参数)

move-result v0  #获取foo函数执行后返回的结果

invoke-virtual{v1,v0},Ljava/io/PrintStream;->println(I)V  #方法调用指令

return-void  #函数从一个void方法返回

.end method  #方法结束符号

# direct methods     #表示这是一个直接方法

.method public constructor <init>()V    #构造函数

.registers 1   #一个寄存器

.prologue   #代码起始指令

invoke-direct {p0}, Ljava/lang/Object;-><init>()V #调用实例的直接方法

return-void #函数从一个void方法返回

.end method  #方法结束符号

# virtual methods  #表示这是一个虚方法

.method public foo(II)I  #方法名为foo,二个参数且都是int类型,并且返回值为int

.registers 5  #方法中使用5个寄存器

.prologue #代码起始指令

add-int v0,p1,p2 #p1,p2两个int类型相加,结果保存在V0

sub-int v1,p1,p2#p1,p2两个int类型相减,结果保存在V1

mul-int/2addr v0,v1  #v0,v1两个寄存器进行乘法运算,结果存储在v0寄存器

return v0   #返回寄存器V0的值

.end method #方法结束符号

java源码:

public class
Calculate

{

public int foo(int a,int b){

return (a+b)*(a-b);

}

public static void main(String[] argc)

{

Hello hello=new Hello();

System.out.println(hello.foo(5,3));

}

}

时间: 2024-11-05 21:42:44

用Dalvik指令集写个java类的相关文章

JSP数据库操作和调用自己写的java类

作为新手在这卡了很久,其实是个小问题 调用数据库没有直接用jsp直接调用数据,因为不知道为什么那个drive总是配置不好 而是打算用java访问数据库,再让jsp调用Java的接口 java代码: java必须有个自己的包,不能用默认的包名 package test; import java.sql.*; public class Mysql { public Mysql(){ String driver = "com.mysql.jdbc.Driver"; // URL指向要访问的数

请写一个java类,在任何时候都可以向它查询“你已经创建了多少个对象?”

这个问题解决方法很简单,只要设置一个类的静态整型成员(事例中我设置的是n),初始化值为1,然后在其构造函数中添加语句使其+1(n++),这样需要查询创建了多少个对象时直接查询n的值就可以了,如下: 1 package trr; 2 3 public class trr 4 { 5 public static void main(String[] args) 6 { 7 a c1=new a(); 8 System.out.println("创建了"+a.n+"个对象"

Java类的静态块の一

类的静态块在类加载时候执行,执行早于构造函数,并且只执行一次. 下面这个例子可以帮助理解: 1 package untility; 2 3 public class A { 4 // 静态块 5 static { 6 A c ; 7 System.out.println(200); 8 c = new A(); 9 i = 10; 10 } 11 12 public static int i; 13 public int j; 14 15 public A() { 16 System.out.p

mac os intellij如何快路查看一个java类的所有方法,结构

如果是自己写的java类,点击点击导航的project-setting-show members 如果是系统库的,点击structure 再点一下lib中的类,或者快捷键 command+F12

小峰视频二:java类的编译与解释

先写一个java类文件 如: public class HelloWorld{ public static void main(String args[]){ System.out.println("java大爷,你好!"); } } javac HelloWorld.java   现在指定路径编译 生成 HelloWorld.class 文件 java HelloWorld       再解释运行 输出:java大爷,你好! 原文地址:https://www.cnblogs.com/

java中IO写文件工具类

下面是一些根据常用java类进行组装的对文件进行操作的类,平时,我更喜欢使用Jodd.io中提供的一些对文件的操作类,里面的方法写的简单易懂. 其中jodd中提供的JavaUtil类中提供的方法足够我们使用,里面的方法写的非常简练,例如append,read等方法,封装更好,更符合面向对象, 这里面我写的一些方法可多都是模仿jodd,从里面进行抽取出来的. /** * 获取路径文件夹下的所有文件 * @param path * @return */ public static File[] ge

Java基础-继承-编写一个Java应用程序,设计一个汽车类Vehicle,包含的属性有车轮个数 wheels和车重weight。小车类Car是Vehicle的子类,其中包含的属性有载人数 loader。卡车类Truck是Car类的子类,其中包含的属性有载重量payload。每个 类都有构造方法和输出相关数据的方法。最后,写一个测试类来测试这些类的功 能。

#29.编写一个Java应用程序,设计一个汽车类Vehicle,包含的属性有车轮个数 wheels和车重weight.小车类Car是Vehicle的子类,其中包含的属性有载人数 loader.卡车类Truck是Car类的子类,其中包含的属性有载重量payload.每个 类都有构造方法和输出相关数据的方法.最后,写一个测试类来测试这些类的功 能. package hanqi; public class Vehicle { private int wheels; private int weight

[转载]Dalvik指令集

这篇文章是转载的,为了便于查找一些指令,贴在这里. 转自:http://blog.csdn.net/canfengxiliu/article/details/20144119 --------------------- 声明 : 文章是看<<Android软件安全与逆向分析>>的所写笔记. Dalvik指令格式 一段Dalvik汇编代码由一系列Dalvik指令组成,指令语法由指令的位描述与指令格式标识来决定.位描述约定如下: ● 每16位的字采用空格分隔开来. ● 每个字母表示4位

自己写一个java.lang.reflect.Proxy代理的实现

前言 Java设计模式9:代理模式一文中,讲到了动态代理,动态代理里面用到了一个类就是java.lang.reflect.Proxy,这个类是根据代理内容为传入的接口生成代理用的.本文就自己写一个Proxy类出来,功能和java.lang.reflect.Proxy一样,传入接口.代理内容,生成代理. 抛砖引玉吧,个人觉得自己写一些JDK里面的那些类挺好的,写一遍和看一遍真的是两个不同的概念,写一遍既加深了对于这些类的理解.提升了自己的写代码水平,也可以在写完之后对比一下自己的实现有哪些写得不好