写一个Dalvik版的Hello World-程序员宅基地

技术标签: Android软件安全与逆向分析笔记  

本文是  Dalvik指令集 的小练习

新建一个文本文件改名为HelloWorld.smali,然后写出HelloWorld类的程序代码如下

.class public LHelloWorld;    #定义类名
.super Ljava/lang/Object;    #定义父类
.method public static main([Ljava/lang/String;)V    #声明静态main()方法
    .registers 4       #程序中使用v0、v1、v2寄存器和一个参数寄存器
    .parameter      #一个参数
    .prologue          #代码起始指令
     #空指令
    nop
    nop
    nop
    nop
     #数据定义指令 v0 = 8; v1 = 5; v2 = 3;
     const/16 v0, 0x8
     const/4 v1, 0x5
     const/4 v2, 0x3
     #数据操作指令   v1 = v2;
     move v1, v2
     #数组操作指令   v0 = new int[v0]; v1 = v0
     new-array v0, v0, [I
     array-length v1, v0
     #实例操作指令 v1 = new StringBuilder();
     new-instance v1, Ljava/lang/StringBuilder;
     #方法调用指令 v1.init();
     invoke-direct {v1}, Ljava/lang/StringBuilder;-><init>()V
     #跳转指令 if(v0 != 0)
     if-nez v0, :cond_0
     goto :goto_0
     :cond_0
     #数据运算指令 v2 = v2 << v2;  (v2 == 24)
     shl-int v2, v2, v2
     #数据转换指令  v2 = (float) v2; 
     int-to-float v2, v2
     #数据运算指令 v2 += v2;   (v2 == 48.0)
     add-float v2, v2, v2
     #比较指令 v0 = v2 < v2;  (v0 == 0)
     cmpl-float v0, v2, v2
     #字段操作指令 PrintStream v0 = System.out;  v1 = "Hello World"
     sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream;
     const-string v1, "Hello World" #构造字符串
     #方法调用指令 v0.println(v1); v0.println(v2);
     invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V
     invoke-virtual {v0, v2}, Ljava/io/PrintStream;->println(F)V
     #返回指令
     :goto_0
    return-void      #返回空
.end method

接下来编译smali文件,需要用到smali.jar。在cmd输入如下命令(smali.jar 和 HelloWorld.smali 在同一个目录):
java -jar smali.jar -o classes.dex HelloWorld.smali
将生成的classes.dex 压缩.zip格式
连接Android设备或模拟器 ,在cmd输入如下命令
adb push classes.zip /data/local
adb shell dalvikvm -cp /data/local/classes.zip HelloWorld

效果截图


版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/yx0914/article/details/20144393

智能推荐

android安装在sd卡上,android_安装软件到SD卡上_凌莫凡的博客-程序员宅基地

《android_安装软件到SD卡上》由会员分享,可在线阅读,更多相关《android_安装软件到SD卡上(12页珍藏版)》请在人人文库网上搜索。1、把 APP2SD 分几步呢?分三步第一步.首先要 root 了,这是必须的,当然你要先做第二步也是没问题的,前两步都是第三步必须而不分先后的.参考 http:/www.in189.com/thread-60651-1-1.html 这个是一键 roo..._android安装sd

mybaits的模糊查询_MyBatis-plus 模糊查询的使用-程序员宅基地

在使用MyBatis-plus的时候,一些基础的增删改查可以不用再自己写sql了:就这样,就可以实现user表的增删改查了。使用userDao.selectList(queryWrapper)方法,就可以查询出一个用户列表。如果需要模糊查询,代码如下:也就是说,调用queryWrapper的like方法就可以。这里,like方法有三个参数:第一个参数:该参数是一个布尔类型,只有该参数是true时,..._mybatis_plus传模糊查询的参数

Java 基础(二十)网络框架设计 MyVolley (上)-程序员宅基地

上周答应大家的,手撸一个网络请求框架。学了快两个月的 java 基础,现在我们来手撸一个网络请求框架练练手。手写一个网络请求框架需要掌握的知识点比较多,其中牵涉到设计模式、集合、泛型、多线程及并发、网络编程等知识,算是对 java 基本功比较全面的考查,同时,对架构能力也有一定的要求。需求先来看看需求~~支持请求 JSON 文本类型学,音频,图片类型,批量下载。上传~请求各种数据时,调用层...

CI框架PHP漫画小说二合一CMS网站系统源码_小说影视二合一源码_banzhuan678的博客-程序员宅基地

简介:CI框架PHP漫画小说二合一CMS网站系统源码 内置采集火车头接口带充值和会员功能在PHP+MYSQL环境下运行的完善而强大的快速建站系统。 经过近多年的开发经验和技术积累,即将成为全网最强漫画+小说系统,在易用性和功能上已经成为同行中的佼佼者。 程序体积小->优化程序代码,运行速度快->高效的缓存处理,只要普通的虚拟主机就可以完美搭建起来,建站成本非常低。MVC模板分离,内置标签,自定义函数标签接口,强大的采集功能,只要你会HTML就可以轻松做出个性化的网站。兼容性和面向场景1、_小说影视二合一源码

redhat nginx php mysql,RHEL / CentOS 8 安装 Nginx, MySQL, PHP (LEMP)-程序员宅基地

LEMP 全写是 Linux + Nginx, + MySQL (MariaDB) + PHP。Nginx (发音能同 engine x) 是一款以性能取向的网页服务器, 较 Apache 使用较少系统资源, 以下是在 CentOS 8 安装 Nginx, MariaDB 及 PHP 的教学.安装 NginxCentOS 8 的 Repository 已经内建了 Nginx, 设定比以前简单, 不..._redhat8离线安装php教程

《数据库》第7章 SQL数据定义、更新及数据库编程(上)——SQL数据语言以及视图_建立学生成绩数据库scoredb.-程序员宅基地

7.3.0 视图视图(VIEW)也被称作虚表,即虚拟的表,是一组数据的逻辑表示,其本质是对应于一条SELECT语句,结果集被赋予一个名字,即视图名字。视图本身并不包含任何数据,它只包含映射到基表的一个查询语句,当基表数据发生变化,视图数据也随之变化。从这个意义来看,视图就像一个窗口,透过它可以看到数据库中用户感兴趣的数据及变化。每一次查看视图或引用视图的的时候,都会运行一次视图上的查询。从数据库系统内部来看,视图是由一张或多张表中的数据组成的,从数据库系统外部来看,视图就如同一张表一样,对表_建立学生成绩数据库scoredb.

随便推点

sql 函数-程序员宅基地

2019独角兽企业重金招聘Python工程师标准>>> ...

Linux服务端编程automake的应用-程序员宅基地

为什么80%的码农都做不了架构师?>>> ..._automake linux 服务端

嵌入式linux 竖屏,嵌入式Linux下竖屏显示配置_大翎爱写字的博客-程序员宅基地

By Toradex胡珊逢1).简介目前大多数设备的显示器是横屏,例如高清分辨率1920×1080、笔记本14寸显示器1366×768以及最近很热门的4K分辨率3840×2160。另外一种则是竖屏显示器,常见于娱乐、广告设备,手机最为常见的竖屏设备,以及户外的广告牌、售货机以及汽车的中控显示台等。大部分显示器控制器都可以支持横屏和竖屏,正如在手机和平板上看到的一样。本文基于Toradex的..._linux imx显示视频到屏幕上

nagios配置文件介绍-程序员宅基地

Nagios配置文件简介1.1配置文件概述nagios安装完成后,配置文件在安装时放在了/usr/local/nagios/etc/目录下。[root@Nagios-Server ~]# ls -l /usr/local/nagios/etc/total 88-rw-rw-r-- 1 nagios nagios 11408 May 29 02:09 cg

PowerShell Script to Deploy Multiple VM on Azure in Parallel #azure #powershell-程序员宅基地

Since I need to deploy, start, stop and remove many virtual machines created from a common image I created (you know, Tabular is not part of the standard images provided by Microsoft…), I wanted to mi...

Python - 字符串(string) 详解 及 代码-程序员宅基地

字符串(string) 详解 及 代码 本文地址:http://blog.csdn.net/caroline_wendy/article/details/17113225 Python的字符串可以使用单引号('), 双引号("), 三引号('''); 三引号(''')里面, 可以添加单引号和双引号, 也可以通过转义序列(\)添加; 字符串放在一起自...