美文网首页arm汇编学习
arm64汇编篇-16指针的基本用法及多级指针反汇编

arm64汇编篇-16指针的基本用法及多级指针反汇编

作者: ClementGu | 来源:发表于2018-06-11 16:08 被阅读43次

空指针

 在win32中指针是随机值,但是在arm中指针是NULL。寄存器中值为0x0000000000000000。

下面看一组代码
void func (){
    char *b;
    char *a = *b;
}

效果如下图:

空指针取值
解析

b是一个指针,然后a取b内存地址值赋值给a,然后报错因为空指针里面没有值。

一级指针运算

1.代码

void func (){
    char *b;
    char *a = b;
    char *c = *(a+1);
}

2.运行汇编结果:


指针的偏移

3.解析
这边指针+1意思是偏移一个单位,而这边的单位是由数据类型决定,char为个字节,如果是int会偏移四个字节大家可以自己试一试。

二级指针运算

1.代码

void func (){
    char **p1;
    char *c = *p1;
    char *d = *(p1+1);
}

2.运行结果:


指针的偏移

3.解析:
p1是一个指向指针地址的指针,所以其移动是指针的8个字节,这也印证了指针的运算是根据其所指向类型的宽度决定的。

不同的指针对应相同的汇编代码

1.代码

void func (){
    char * p1;
    char c = *p1;  
    char c1 = p1[0];
    char d = *(p1+1);
    char d1 = p1[1];
}

2.由上面的代码可以看出两两对应其运行结果是一致的,下面看汇编结果:


不同写法相同汇编

3.解析
由上面图片可以看出其虽然代码以不同的方式写的,但是汇编确实以相同方式体现的,这也使得逆向不可能完全还原高级代码。

二级指针反汇编

1、代码

void func (){
    char **p1;
    char c = **p1;
}

2.运行结果


二级指针反汇编

3.解析
可以看出汇编代码执行步骤

1.将从内存中读取p1的值给寄存器x8。
2.因为p1有一个则去其地址的值,将x8地址的值读取给x8;
3.二级指针最终是指向的char,所以再加
是去上一级地址的值获得char类型,因为char类型比较小可以用低32寄存器就够了,最后保存在w9中。

注:这边汇编并没有出现双取值即[[x8]]的代码(也没有这种写法)而是一级一级取地址的h2。

拓展二级指针实例

1.下面代码分别偏移多少

void func (){
    char ** p1;
    char c = *(*(p1 + 1) + 2);
    char d = p1[1][2];
}

2.解析
上面代码大家可以自己运行试试
1.c和d上面例子说了器汇编是一致的。
2.p1指向的是指针其偏移是8,p1指向的是char所以p1偏移是2,一共偏移10.

相关文章

  • arm64汇编篇-16指针的基本用法及多级指针反汇编

    空指针  在win32中指针是随机值,但是在arm中指针是NULL。寄存器中值为0x000000000000000...

  • 【C语言笔记】<十五>指针

    指针的基本概念 指针的注意点 多级指针 指针为什么分类型

  • arm64汇编篇-015指针的反汇编

    指针的反汇编 1.输入如下代码: 2.真机运行断点调试如图: 1.将栈空间四个字节内存给x8寄存器2.将10赋值给...

  • 指针到底是什么 ?

    通过汇编查看 指针到达是什么? 指针(包括多级指针): 就是 一个 地址编号 ;内容:每个地址编号里面 都存储了东...

  • C++ supplement 指针进阶及const限定符

    在上一节中说到了基本的指针的定义与解析,下面便是升级版,多级指针的理解: 所谓多级指针在于有多重的指针导向,因为指...

  • [arm64]5、指针

    1、指针的基本操作 1.1、指针相加减 1、指针变量加减 2、指针的指针加减 1.2、指针的汇编 1.3、空指针异...

  • 汇编-指针、OC & Block 反汇编

    编译器优化 局部变量&全局变量 在不进行优化的情况下: 改成Fastest、Smallest模式,a和b都被优化掉...

  • C语言基础一

    一、基本数据类型 二、指针 1、基本 2、修改值 4、交换 5、多级指针 三、数组和数组指针 1、基础 数组指针,...

  • 04-汇编基础(终)

    前言 本篇文章是汇编这一部分的最终章了,主要讲解4部分内容: 编译器优化 指针 OC反汇编 Block反汇编 一、...

  • C语言多级指针

    多级指针 指针中保存着其他指针的地址,我们就称之为多级指针 多级指针的定义 在要保存的指针变量的基础上加一颗星即可...

网友评论

    本文标题:arm64汇编篇-16指针的基本用法及多级指针反汇编

    本文链接:https://www.haomeiwen.com/subject/qncmsftx.html