您的位置:首页 > 移动开发 > Android开发

[Android]安全第五步,看懂汇编(续)

2016-12-21 20:07 148 查看




我们可以看出来c2需要间接寻址,因为c2存在于堆中,而c1则不需要,直接放到sp栈中

void testClass(){
class MyTest{
public:
char * dd;
void SetX(double mx,char my, char* mz){
x= mx;
y= my;
z= mz;
f= 32.23;
}
protected:
float  f;
char e;

private:
double x;
char y;
char * z;
char * dz;

};
char  addda[] = "atttd";

MyTest myTest;
myTest.SetX(1.1,'2',addda);

}

在类中,其内存分布与struct一样,



上面的dword_2858其实就是0x9999999A, 0x3FF19999,不同的是因为要放到double中,参数是double类型的,所以需要放到64位中,





其中setText方法就是



在编译器中,有多少对象,就有多少个类的成员变量,即为成员变量随着类的对象生成而生成,但是方法就有一个~

void testUnion(){
typedef union Student{
int age;
float ddd;
char * monday;
char tuesday;
short dsd;
}Student;

Student * dd = (Student * )malloc(111* sizeof(Student));
dd->age = 1;
dd->dsd = 12;
(&dd[2])->age= 2;

Student ccd[2322];
ccd[1].age=2;
ccd[1].ddd=3;
(&ccd[2])->ddd=21.21;
}

共同体union的多个变量在同一个内存区域里面,





共用体表示几个变量共用一个内存位置,在不同的时间保存不同的数据类型和不同长度的变量。
在union中,所有的共用体成员共用一个空间,并且同一时间只能储存其中一个成员变量的值。

http://blog.csdn.net/haiou0/article/details/6903463

void testEnum(){
enum Days{sunday,monday,tuesday};

enum Days theDay;
theDay = (enum Days)(0);

if (sunday == (theDay)){
printf("eee");
}
}




枚举在存储过程中明显也是0,1,2,3.。。的样子。注意枚举的用法。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息