ios逆向 之 汇编

iPhone手机使用的是ARM汇编,不同的设备CPU的架构也是不相同的。

armv6:  iPhone, iPhone2, iPhone3G, 第一代、第二代 iPod Touch

armv7:  iPhone3GS, iPhone4, iPhone4S,iPad, iPad2, iPad3(The New iPad), iPad mini, iPod Touch 3G, iPod Touch4

armv7s:  iPhone5, iPhone5C, iPad4(iPad with Retina Display)

arm64:  iPhone5S 及以后版本.


arm64 经常用到的汇编指令:


MOV X1,X0 ;将寄存器X0的值传送到寄存器X1`

ADD X0,X1,X2 ;寄存器X1和X2的值相加后传送到X0

SUB X0,X1,X2 ;寄存器X1和X2的值相减后传送到X0

AND X0,X0,#0xF ; X0的值与0xF相位与后的值传送到X0

ORR X0,X0,#9 ; X0的值与9相位或后的值传送到X0

EOR X0,X0,#0xF ; X0的值与0xF相异或后的值传送到X0

LDR X5,[X6,#0x08] ;X6寄存器加0x08的和的地址值内的数据传送到X5

STR X0, [SP,#0x8] ;X0寄存器的数据传送到SP+0x8地址值指向的存储空间

STP x29, x30, [sp,#0x10] ;入栈指令

LDP x29, x30, [sp,#0x10] ;出栈指令

CBZ ;比较(Compare),如果结果为零(Zero)就转移(只能跳到后面的指令)

CBNZ ;比较,如果结果非零(Non Zero)就转移(只能跳到后面的指令)

CMP;比较指令,相当于SUBS,影响程序状态寄存器CPSR 

B/BL ;绝对跳转#imm, 返回地址保存到LR(X30)

RET ;子程序返回指令,返回地址默认保存在LR(X30)

        

     do {

        aa=aa+aa;

        printf("doWhileSomeThingdoWhileSomeThingdoWhileSomeThing");

    } while (aa<100);

}>

     

int doSwiftSome(int a){

    switch (a) {

        case 1:

        {

            printf("switch1111111111");

        }

        break;

        case 2:

        {

            printf("switch22222222");

        }

            break;

        case 3:

        {

            printf("switch333333333");

        }

            break;


        default:

            printf("switchdefaultdefaultdefaultdefault");

            break;

    };

    return 0;ModelTestViewController

}

你可能感兴趣的:(ios逆向 之 汇编)