arm32下对象数组的逆向分析

0x0 概述

最近学习arm32的逆向分析,写了一些代码,对照着汇编看。下边分析了对象数组的汇编实现。

0x1 c语言

c语言代码如下:

#include <stdio.h>
class CNumber{
public:
        CNumber(){
                m_nNumber=1;
                m_fNumber=0.1;
        }
        ~CNumber(){
                printf("~CNumber\r\n");
        }
        int m_nNumber;
        float m_fNumber;
};

int main(int argc,char **argv){
        CNumber *pNumber=NULL;
        pNumber=new CNumber[3];

      

        if(pNumber!=NULL){
                delete[] pNumber;
                pNumber=NULL;
        }

}
0x2  对象数组的分配

汇编如下:


对象数组的的内存结构是首先保存对象的大小,然后紧跟对象数组的个数,后边才是每一个对象,其内存结构如下:

sizeof(CNumber)
3
CNumber[0]
CNumber[1]
CNumber[2]
这里说一句,一般R11辅助寻址时,有很大可能就是一个对象。

0x3 构造函数

对象数组分配完成后,就就要对每一个对象调用构造函数。构造函数要传入this指针,即每个对象的首地址。其汇编如下:


构造函数的识别有以下几点:1.第一个调用的函数。2.传入this指针。3.返回this指针。构造函数的汇编如下:


0x3析构函数

调用析构函数时,就用到了对象数组保存的对象个数,然后调用每一个对象的析构函数。


0x4 delete[]

调用delete[]的时候传入的地址为对象数组的地址。如果分配了对象数组,调用了delete而不是得delete[]的话,就会忽略掉对象数组的前两个元素,会出现问题。


0x5总结

写的东西比较基础,主要是用来备忘,打好基本功。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值