类的反汇编私有成员为什么不是栈里面呢?

img

img


请问,为什么x,y是在[eax+0]和[eax+4]寄存器里面呢?不应该在栈[ebp-n]吗?这是怎么回事?
请问,汇编寻址方式中的 寄存器间接寻址是用来干什么的吗? 比如立即寻址一般是立即数赋值使用的。
那 寄存器间接寻址[ebx]是什么功能呢在反汇编中?

间接寻址就是使用寄存器作为指针,控制该寄存器的值来寻到数组中的元素。间接寻址是建立在直接寻址上的,就是值指地址的地址,或者存放地址的寄存器。

在类成员函数里,类数据成员是通过this指针+偏移访问,this指针一般是一个对象的首地址,这里寄存器EAX存的就是this指针
上面构造函数等价于

point(int d1, int s1)
{
    this->x = d1;
    this->y = s1;
}

寄存器间接寻址[EBX]意思就是把寄存器EBX里的内容当着地址,然后去读或写这个地址所指内存里的内容。

对象在栈里,他的成员就在栈里

你说的应该是对象的成员变量
如 begar(不懂编程的程序员) 所说,对象的成员变量就放在对象内
如果对象本身是堆栈(SS)里的,那么它的(非静态)数据成员也在堆栈里
如果对象本身是堆里的,那么它的(非静态)数据成员也在堆里
如果对象本身是DS里的,那么它的数据成员也在DS里
所谓public/private/protected规定的是成员的“存取”权限
而SS/DS/Heap是“存储”方式,与前者没有任何关系