专栏电商日志财经减肥爱情
投稿投诉
爱情常识
搭配分娩
减肥两性
孕期塑形
财经教案
论文美文
日志体育
养生学堂
电商科学
头戴业界
专栏星座
用品音乐

Smali语法基础

  Smali是什么
  Smali是Android虚拟机的反汇编语言。
  我们都知道,Android代码一般是用java编写的,执行java程序一般需要用到java虚拟机,在Android平台上也不例外,但是出于性能上的考虑,并没有使用标准的JVM,而是使用专门的Android虚拟机(5。0以下为Dalvik,5。0以上为ART)。Android虚拟机的可执行文件并不是普通的class文件,而是再重新整合打包后生成的dex文件。dex文件反编译之后就是Smali代码,所以说,Smali语言是Android虚拟机的反汇编语言。掌握Smali有哪些好处
  1、动态调试APK,通常静态分析APK是不够的,如果需要彻底分析APK的执行逻辑,需要通过动态调试来进行。
  具体教程参考:https:www。jianshu。comp9931a1e77066
  2、修改APK运行逻辑,通过修改Smali代码,再重新编译打包成新的APK,是Android逆向的基本操作。Smali基本语法数据类型
  语法关键词
  寄存器
  Java中变量都是存放在内存中的,Android为了提高性能,变量都是存放在寄存器中的,寄存器为32位,可以支持任何类型。
  为什么寄存器比内存快,可以参考这篇文章:http:www。ruanyifeng。comblog201310register。html
  寄存器分为如下两类:
  1、本地寄存器
  用v开头数字结尾的符号来表示,v0,v1,v2,。。。
  2、参数寄存器
  用p开头数字结尾的符号来表示,p0,p1,p2,。。。
  注意:
  在非static方法中,p0代指this,p1为方法的第一个参数。
  在static方法中,p0为方法的第一个参数。
  Smali代码示例:const4v0,0x1把值0x1存到v0本地寄存器iputbooleanv0,p0,Lcomaaa;IsRegisterd:Z把v0中的值赋给com。aaa。IsRegistered,p0代表this,相当于this。Isregisteredtrue成员变量
  成员变量定义格式为:
  。fieldpublicprivate〔static〕〔final〕varName:类型
  获取指令
  iget,sget,igetboolean,sgetboolean,igetobject,sgetobject
  操作指令
  iput,sput,iputboolean,sputboolean,iputobject,sputobject
  array的操作是aget和aput
  指令解析
  sgetobjectv0,Lcomaaa;ID:LjavalangString;
  获取ID这个String类型的成员变量并放到v0这个寄存器中
  igetobjectv0,p0,Lcomaaa;view:Lcomaaaview;
  igetobject比sgetobject多一个参数p0,这个参数代表变量所在类的实例。这里p0就是this
  Smali代码示例1:const4v3,0x0sputobjectv3,Lcomaaa;timer:Lcomaaatimer;
  相当于java代码:this。timernull;
  Smali代码示例2:。localv0,args:LandroidosMessage;const4v1,0x12iputv1,v0,LandroidosMessage;what:I
  相当于java代码:args。what18;
  其中args为Message的实例函数
  函数定义格式为:
  。methodpublicprivate〔static〕〔final〕methodName()类型
  。endmethod
  Smali代码示例。methodprivateifRegistered()Z。locals2本地寄存器的个数。prologueconst4v0,0x1v0赋值为1ifeqzv0,:cond0判断v0是否等于0,等于0则跳到cond0执行const4v1,0x1符合条件分支:goto0标签returnv1返回v1的值:cond0标签const4v1,0x0cond0分支goto:goto0跳到goto0执行。endmethod
  函数分为两类:directmethod和virtualmethod
  directmethod就是private方法,virtualmethod就是指其余的方法。
  调用指令:
  invokedirect
  invokevirtual
  invokestatic
  invokesuper
  invokeinterface
  调用格式:
  invoke指令类型{参数1,参数2,。。。},L类名;方法名
  如果不是是静态方法,参数1代表调用该方法的实例。
  Smali代码示例:conststringv0,NDKLIBinvokestatic{v0},LjavalangSystem;loadLibrary(LjavalangString;)V
  相当于java代码:System。loadLibrary(NDKLIB)
  函数返回结果
  Smali需要用指令moveresult或moveresultobject来保存函数返回的结果
  Smali代码示例:conststringv0,Ericinvokestatic{v0},Lcmbpbi;t(LjavalangString;)LjavalangString;moveresultobjectv2
  表示将方法t返回的String对象保存到v2中。方法的定义privatestaticintsum(inta,intb){returnab;}
  使用编译后是这样。methodprivatestaticsum(II)I。locals4表示需要申请4个本地寄存器。parameter。parameter这里表示有两个参数。prologue。line27movev0,p0。localv0,a:Imovev1,p1。localv1,b:Imovev2,v0movev3,v1addint2addrv2,v3movev0,v2。endlocalv0a:Ireturnv0。endmethod
  从上面可以看到函数声明使用。method开始。endmethod结束,java中的关键词private,static等都可以使用,同时使用签名来表示唯一的方法,这里是sum(II)I。指令执行
  smali字节码是类似于汇编的,如果你有汇编基础,理解起来是非常容易的。
  比如:
  movev0,v3把v3寄存器的值移动到寄存器v0上。
  constv0,0x1把值0x1赋值到寄存器v0上。
  invokestatic{v4,v5},LmeismingmyapplicationMainActivity;sum(II)I执行方法sum(),v4,v5的值分别作为sum的参数条件跳转分支ifeqvA,vB,:condx如果vA等于vB则跳转到:condxifnevA,vB,:condx如果vA不等于vB则跳转到:condxifltvA,vB,:condx如果vA小于vB则跳转到:condxifgevA,vB,:condx如果vA大于等于vB则跳转到:condxifgtvA,vB,:condx如果vA大于vB则跳转到:condxiflevA,vB,:condx如果vA小于等于vB则跳转到:condxifeqzvA,:condx如果vA等于0则跳转到:condxifnezvA,:condx如果vA不等于0则跳转到:condxifltzvA,:condx如果vA小于0则跳转到:condxifgezvA,:condx如果vA大于等于0则跳转到:condxifgtzvA,:condx如果vA大于0则跳转到:condxiflezvA,:condx如果vA小于等于0则跳转到:condx
  转自:https:www。jianshu。compba9b374346dd
  更多资料:https:www。52pojie。cnthread40864511。html

司马光砸缸救人,救出来的小孩是谁?为何老师上课从来不提?小时候我们只知道司马光砸缸救人的故事,那么你有没有想过,他救出来的小孩到底是谁呢?为什么老师来不提司马光砸缸的后续呢?其实真相令人大吃一惊!司马光砸缸最早记载于北宋时期惠洪的冷斋夜1936年,美国一女子将熊猫幼崽偷带回国,大熊猫差点因此灭绝大熊猫作为中华国宝,是深受国人喜欢的,现在大熊猫的数量比起以前已经增加了很多,这得益于国家的保护以及工作人员的细致照顾。但很多人并不知道的是,在上世纪30年代,一个名叫露丝哈克尼斯吕后的黑化之路史记009之吕太后本纪以前总觉得汉惠帝懦弱无能,现在看完吕太后本纪再看他,也多了点理解,好像太过强势的母亲都会有个不够强势的儿子,孝惠为人仁弱,高祖以为不类我,常欲废太子,立戚姬子如意,如意类我,从一开胡鑫溢11。2利率决议重磅来袭,今日晚间黄金重点分析解读境界决定世界,利益是执行的源动力,面对趋势,不是你有多少好点子,而是你的好点子做了多少,不谋全局者不足谋一域。利润不是运气,而是选择获利不止是假设,最重要是去做,盈亏不是名词,而是当代人的四大喜事冷段子2328ampampamp去年今日19702022年11月02日当代人的四大喜事长辈催我表姐找男朋友。我表姐说这个世界上,我只对一个男人感兴趣。我们几个都屏住呼吸,等着她说出个什么初恋情人或者大学同学的名字。结果她说那就是哈登23717创6纪录无缘今日最佳球员!因为乔治一战成为历史首人今天NBA又进行了非常多的比赛,众多球星的表现也可圈可点,杜兰特哈登西亚卡姆霍勒迪莫兰特马尔卡宁米切尔马克西小马丁字母哥等人也都打出了很不错的数据表现。但是如果要评选今日最佳球员的川藏线的穷游女,想搭车却屡次被拒,为何?老司机道出实情最近这些年,有越来越多的人非常喜欢在青藏线上穿梭,毕竟,随着经济水平的不断发展,有很多老百姓手中能够利用的金钱越来越多,所以很多老百姓都有了出去游玩的需求,在这样的情形之下,每年川美到窒息!贵州最美的千年银杏,美得如童话世界从来银杏不负秋,又是一年叶黄时。在贵州就要一处绝美的银杏观赏地,这是贵州最美的秋,一树灿烂,满地金黄。美到窒息的千年银杏,为人们打造了一场秋天里的童话仙境,引人无限向往。叶落知秋,陇原文创破圈远航拓蓝海我省深促文旅融合打造文创产业高地陇原文创破圈远航拓蓝海我省深促文旅融合打造文创产业高地敦煌文创将美好祝福传向全国各地,掀起了打卡文化地标购买国潮文创的热潮。平凉市崆峒山文创中心文创产品。酒泉有礼文创和旅游商品。张带上青春去看海海南印象之四傍晚的海滩三亚无论是春夏秋冬,都沉醉在声声婉转的鸟语声中,清脆悦耳,馥郁的花香沁人心脾,灵动的音符在这美好的季节之中飘扬。三亚被蓝透了的海水包围着,洋溢着浓浓的热带风情。蓝蓝的天与扬州景区新增1例核酸检测结果异常人员,通告活动轨迹扬子晚报网11月2日讯(记者陈咏)11月2日晚,扬州蜀冈瘦西湖风景名胜区新冠肺炎疫情防控工作指挥部发布通告,11月2日上午,蜀冈瘦西湖风景名胜区在集中隔离点发现1名核酸检测阳性人员
国产机为什么再怎么堆料都卖不过苹果?就凭安卓系统下一个APP要一堆权限,我一辈子也不会用它!个人喜好,无所谓国产不国产,更不要拿爱国来道德绑架,一个通讯工具而已,和爱国主义联系在一起它配吗!谢邀!其实并不是这样的,从697071岁养老金调整差距有多大?697071岁养老金调整会有多大差距,这个没有设置前提条件是不好做对比的。首先可以肯定的是69周岁以及70周岁以上退休人员养老金调整幅度肯定会有一些区别。目前各省在落实养老金调整方纠结,Q5LXC60都看了,不知道怎么选,请过来人指点?就这两台车来说,XC60更可靠些。因为奥迪Q5L用的是和大众一样的2。0T发动机和七速双离合变速箱。过来人都知道,大众涡轮增压发动机烧机油问题一直没解决,国六排放的车型都增加了颗粒吃厦门泡面是怎样一种体验?老厦门人绝对知道这款泡面!5毛一包到现在的1块多,作为90后的我来说,童年不少日子可以说都是靠这个打发的,我那个时候应该已经7毛左右一包了吧,厦门泡面里面没有像康师傅那种3包调味料中国有很多知名白酒,前10名位置怎么排?谢邀,根据国家名酒排名,酱香型,茅台酒,郎酒。浓香型,五粮液酒,泸州老窖特曲,剑南春酒,洋河大曲酒,古井贡酒。清香型,汾酒,黄鹤楼酒,药香型,董酒。目前中国有很多白酒,每个省份都有学习电商怎么学?哥们儿,说良心话啊,我不太建议新手学电商开网店!不是这行不赚钱也不是这行没前途,而是对于没人教没人带没资源的群体而言,实在太难太难了。举个例子,就像一个小学毕业的成年人,没技术没人虚寒体质到底有没有可能改善?该怎么做?虚寒体质到底有没有可能改善?该怎么做?首先谢谢你的邀请,我只是一个村医。虚寒体质到底有没有可能改善,当然可以改善了,我们先看看,虚寒体质是怎么形成的,知道了形成虚寒体质的原因,然后踏空新能源,踩雷白马股,明年靠什么回本?毓美美作答自去年下半年持有白马股至今未放手的散户而言,心情都是难于言表的。经历了一波过山车的刺激,体尝了利润从快速飞升又极速回吐后,到目前依然两手空空,甚至亏损累累。尤其看到新能源怎样修炼成一名合格的交易员?我做了十几年的交易,14年前后也曾搞过团队接资金托管,现在偶尔做做培训,纯粹的野生交易者(自学自悟)这篇文章,我想从主观经历和旁观听闻的角度来聊一聊对于交易员成长的看法,希望能给关吃饭的时候同事让我帮她代付款一下,之后也不给我钱,两次了,之后碰到我该怎么办?我的一个同事也是,她买早点的时候从来不给别人捎带,别人买早点的时候,她就让人捎带,别人给捎来了,从来不说给钱,如此几次,再也没有人帮她捎早点了!其实,便宜都是人家给你占的,不给你,儿子学了3个课外班,妻子还想让他学钢琴,我不同意,该怎么办?学钢琴,把街舞课停了!因为练钢琴可以促进小孩大脑神经元发育,可以变聪明,以后上学背书都会比别的孩子快,专注力和记忆力比不学琴的孩子要强很多。若是剖腹产出生的孩子,更要从小练钢琴,可
友情链接:快好找快生活快百科快传网中准网文好找聚热点快软网