



全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
最近对移动端产生了很浓厚的兴趣,那就开始学习吧!因为还有工作任务,忙里偷闲把丰生强的前3章认真读了一遍。小结内容是说必须熟练掌握这一部分的内容,可通过手动编写Dalvik汇编代码来熟悉一下指令,为后面的分析夯实好基础。书上的是一个显示HelloWorld的例子,为了练习好基础。准备要用Dalvik汇编写一个简单的程序,功能如下:按照书上的,把框架搭好如下:代码:.classpublicLtest;.superLjava/lang/Object;.methodpublicconstructor()V#寄存器数量待定.loguereturn-void.endmethod思路:由于要传2个参数进去计算,并不是像书上的例子一样,只是打印出一行字,所以要弄清楚参数是如何传进去的。写一个简单的程序反编译看看。程序代码:代码:publicclasstest2publicstaticvoidmain(Stringargs)Stringa=args0;编译成smali代码先看看参数是怎么样传进去的,smali代码如下:代码:.classpublicLtest2;.superLjava/lang/Object;.sourcetest2.java#directmethods.methodpublicconstructor()V.logue.line1invoke-directp0,Ljava/lang/Object;-()Vreturn-void.endmethod.methodpublicstaticmain(Ljava/lang/String;)V.logue.line4const/4v0,0x0aget-objectv0,p0,v0.line6return-void.endmethod发现除了main函数外还有一个directmethod:代码:.methodpublicconstructor()V表示该类的不带参数缺省的构造方法看来这就是传参的关键。代码:const/4v0,0x0aget-objectv0,p0,v0Main函数中用这2句的接受传进来的值。所以应该先添加这个构造方法:代码:#directmethods.methodpublicconstructor()V.logueinvoke-directp0,Ljava/lang/Object;-()Vreturn-void.endmethod接着写代码如下:代码:#V0V1清零const/4v0,0x0const/4v1,0x0#接收传进来的2个参数aget-objectv0,p0,v0aget-objectv1,p0,v1#把第一个参数转化成int类型给voinvoke-staticv0,Ljava/lang/Integer;-parseInt(Ljava/lang/String;)Imove-resultv0#把第二个参数转化成int类型给v1invoke-staticv1,Ljava/lang/Integer;-parseInt(Ljava/lang/String;)Imove-resultv1#两个参数相加值存给voadd-int/2addrv0,v1#把vo中的结果转化成String类型再给v0invoke-staticv0,Ljava/lang/String;-valueOf(I)Ljava/lang/String;move-result-objectv0#构造一个String类型对象的新实例把值赋给v2new-instancev2,Ljava/lang/StringBuilder;#调用实例的直接方法invoke-directv2,Ljava/lang/StringBuilder;-()V#定义一个字符串常量const-stringv3,TheSumis:#调用实例方法,把v3与v2里的字符串相加再给v2invoke-virtualv2,v3,Ljava/lang/StringBuilder;-append(Ljava/lang/String;)Ljava/lang/StringBuilder;move-result-objectv2#调用实例方法,把v0与v2里的字符串相加再给v2invoke-virtualv2,v0,Ljava/lang/StringBuilder;-append(Ljava/lang/String;)Ljava/lang/StringBuilder;move-result-objectv2#输出结果invoke-virtualv1,v2,Ljava/io/PrintStream;-println(Ljava/lang/String;)V终于写完了,我们编译好来看看结果。编译出dex文件:Push到android里:执行:发现报错了。百思不得其解,纠结了好久。代码也检查了好几遍,最后都要崩溃了,还是出错。后来实在忍无可忍,写了个程序反编译出dex文件看看吧。结果发现了原来少了这么一句:代码:#此句加在输入结果之前,将v2里的东西转化成String类型。invoke-virtualv2,Ljava/lang/StringBuilder;-toString()Ljava/lang/String;move-result-objectv2重新编译dex-PUSH-执行再试试:好了,当然编写的过程中可能会出现各种各样的错误,需要耐心+毅力。最后要说一下,.parameter这行我是删了,用了2个版本的都试了一下,发现没有.parameter
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 灯具店转让合同范本
- 检验工作心得体会和感悟(汇编10篇)
- 金融科技支付服务消费金融模式用户消费方式提升创新性
- 2025年高考日语试卷及答案
- 需求工程试题及答案
- 2025年康复解剖大题题库及答案
- 汤沟酒厂招聘考试试题及答案
- 2025年山西特岗教师招聘考试试题(附答案)
- CN222961012U 一种欧式双梁桥式起重机 (河南力富特起重运输机械有限公司)
- 2025年船舶测速题库及答案
- 电梯周期日常维护保养项目表
- 工程项目进度管理-课件
- (中职中专)二维动画设计软件应用完整版课件汇总全书电子教案(最新)
- 国际贸易理论与实务ppt课件(完整版)
- GB∕T 6546-2021 瓦楞纸板边压强度的测定
- 历史选择性必修1 国家制度与社会治理(思考点学思之窗问题探究)参考答案
- 学前儿童发展心理学(第3版-张永红)教学课件1754
- 医学资料冠心病英文版
- 部编人教版九年级语文上册教学计划及教学进度表
- 干法——稻盛和夫
- 城市垃圾焚烧发电处理讲解
评论
0/150
提交评论