您现在的位置是:主页 > news > 公司做网站要注意什么/100个裂变营销案例

公司做网站要注意什么/100个裂变营销案例

admin2025/6/27 5:42:34news

简介公司做网站要注意什么,100个裂变营销案例,酒店网站建设方案策划,wordpress php扩展DalvikDVM运行Dalvik字节码,可执行文件格式dex(dalvik executable),有点类似于机器码。DVM基于寄存器,JVM基于栈。smali语法变量和参数寄存器命名方式v命名法p命名法寄存器含义v0v0第一个局部变量寄存器……中间的局部变量寄存器vM-Np0第一个…

公司做网站要注意什么,100个裂变营销案例,酒店网站建设方案策划,wordpress php扩展DalvikDVM运行Dalvik字节码,可执行文件格式dex(dalvik executable),有点类似于机器码。DVM基于寄存器,JVM基于栈。smali语法变量和参数寄存器命名方式v命名法p命名法寄存器含义v0v0第一个局部变量寄存器……中间的局部变量寄存器vM-Np0第一个…

Dalvik

DVM运行Dalvik字节码,可执行文件格式dex(dalvik executable),有点类似于机器码。DVM基于寄存器,JVM基于栈。

smali语法

变量和参数寄存器命名方式

v命名法

p命名法

寄存器含义

v0

v0

第一个局部变量寄存器

中间的局部变量寄存器

vM-N

p0

第一个参数寄存器(通常为调用对象)

中间的参数寄存器

vM-1

pN-1

第N个参数寄存器

通常使用p命名法进行记录。

类型描述符

语法

类型

——

———-

V

void

Z

boolean

B

byte

S

short

C

char

I

int

J

long

F

float

D

double

L

java类

[

数组

注:

变量存放在寄存器中,寄存器为32位,支持任何类型,其中long,double是64位,使用两个相邻的寄存器。

[x表示一维数组,x代表基本类型,如[I代表int[],[[x代表二维数组。

Java语言存在大量对象,java.lang.String表示为Ljava/lang/String;;分号一定要加上。

方法和字段

方法定义1

2

3

4

5

6

7

8

9#direct/virtual methods

.method [修饰关键字]

[.param]

[.prologue]

[.line]

.end method

direct/virtual methods是注释,是baksmali添加的,访问权限和修饰关键字跟字段是一样的。

方法原型描述了方法的名称、参数与返回值。.registers 指令指定了方法中寄存器的总数,这个数量是参数和本地变量总和。

.param表明了方法的参数,每个.param指令表示一个参数,方法使用了几个参数就有几个.parameter指令。

.prologue指定了代码的开始处,混淆过的代码可能去掉了该指令。

.line指明了该处代码在源代码中的行号,同样,混淆后的代码可能去掉了行号。

.local 使用这个指定表明方法中非参寄存器

方法调用

方法调用格式:Lpackage/name/ObjectName;->MethodName(III)Z

等价于bool package.name.ObjectName.MethodName(int,int,int)

例子:

method(I[[IILjava/lang/String;[Ljava/lang/Object;)Ljava/lang/Stirng

等价于

String method(int,int[][],int,String,Object[])

字段调用

格式:Lpackage/name/ObjectName;->FieldName:Ljava/lang/String;

等价于:package.name.ObjectName.FieldName

头信息-类的主体信息1

2

3

4

5

6

7

8

9

10//===================================================================

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

// ......

}

//=========smali文件头====================================================

.class public Ltestdemo/hpp/cn/test/MainActivity;

.super Landroid/support/v7/app/AppCompatActivity;

.source "MainActivity.java"

.implements Landroid/view/View$OnClickListener;

//===================================================================

.class [关键修饰字] ;

.super ;

.source

.implements

判断语句

共有12种判断语句

1

2

3

4

5

6

7

8

9

10

11

12

13if-eq vA, VB, cond_** 如果vA等于vB则跳转到cond_**。相当于if (vA==vB)

if-ne vA, VB, cond_** 如果vA不等于vB则跳转到cond_**。相当于if (vA!=vB)

if-lt vA, VB, cond_** 如果vA小于vB则跳转到cond_**。相当于if (vA

if-le vA, VB, cond_** 如果vA小于等于vB则跳转到cond_**。相当于if (vA<=vB)

if-gt vA, VB, cond_** 如果vA大于vB则跳转到cond_**。相当于if (vA>vB)

if-ge vA, VB, cond_** 如果vA大于等于vB则跳转到cond_**。相当于if (vA>=vB)

if-eqz vA, :cond_** 如果vA等于0则跳转到:cond_** 相当于if (VA==0)

if-nez vA, :cond_** 如果vA不等于0则跳转到:cond_**相当于if (VA!=0)

if-ltz vA, :cond_** 如果vA小于0则跳转到:cond_**相当于if (VA<0)

if-lez vA, :cond_** 如果vA小于等于0则跳转到:cond_**相当于if (VA<=0)

if-gtz vA, :cond_** 如果vA大于0则跳转到:cond_**相当于if (VA>0)

if-gez vA, :cond_** 如果vA大于等于0则跳转到:cond_**相当于if (VA>=0)

其它基本指令

smali字节码类似于汇编

.method  方法

.end method  函数结束

.parameter  方法参数

.prologue  方法开始

.line 12  此方法位于第12行

.field private isFlag:z  定义变量

move v0, v3 把v3寄存器的值移动到寄存器v0上

const-string v0, “MainActivity” 把字符串”MainActivity”赋值给v0寄存器

const/high16 v0, 0x7fo3  把0x7fo3赋值给v0

invoke-super  调用父函数

return-void  函数返回void

new-instance  创建实例

iput-object  对象赋值

iget-object  调用对象

invoke-static  调用静态函数

invoke-direct  调用函数

例子:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31//===================================================================

@Override

public void onClick(View view) {

String str = "Hello World!";

print(str);

}

//===================================================================

# virtual methods

# 参数类型为Landroid/view/View,返回类型为V

.method public onClick(Landroid/view/View;)V

# 表示有三个寄存器

.registers 3

# 参数View类型的view变量对应的是寄存器p1

.param p1, "view" # Landroid/view/View;

.prologue

.line 24

#将"Hello World!"字符串放到寄存器v0中

const-string v0, "Hello World!"

.line 25

# 定义一个Ljava/lang/String类型的str变量对应本地寄存器v0

.local v0, "str":Ljava/lang/String;

# 调用该类的print方法,该方法的参数类型为Ljava/lang/String,返回值为V

# 调用print方法传入的参数为{p0, v0},及print(p0, v0),p0为this,v0为"Hello World!"字符串

invoke-direct {p0, v0}, Ltestdemo/hpp/cn/annotationtest/MainActivity;->print(Ljava/lang/String;)V

.line 26

return-void

.end method

//===================================================================