美文网首页
指针的安全性问题

指针的安全性问题

作者: SDBridge | 来源:发表于2017-08-26 11:37 被阅读8次

指针在提供方便的同时,也相当危险.

int main(int argc, const char * argv[]) {
    int array[4] = {9,10,11,12};
    int array2[8] = {1,2,3,4,5,6,7,8};
    
    for (int i = 0; i < 12; ++i) {
        printf("%d\n", array2[i]);
    }
    return 0;
}

运行的结果如下:

1
2
3
4
5
6
7
8
9
10
11
12

array、array2的内存结构,在它们初始化的时,都是放在栈中,而栈的物理结构是连续的,并且按照FIFO的原则,array先初始化放在高地址,array2后初始化放在低地址。如下图所示:

array和array2在栈上的存储结构.png

可见,透明的指针带来的问题在于,开发者知道了太多他们本来不该知道的东西(比如开发者竟然可以拿到变量的真实地址,还可以不借助变量名就访问一个变量,比如这里的 array)。在某些精心构造的场合下,攻击者甚至可以通过修改字符串的值来控制程序的执行逻辑,只要计算得当,他们可以调用原本根本不会被调用的函数。

在引用的概念中,引用就是引用,它什么也不是,更不可能是数字,也就谈不上什么四则运算了。因此想要通过 A 对象的引用来访问 B 对象是完全不可能的。

相关文章

  • 指针的安全性问题

    指针在提供方便的同时,也相当危险. 运行的结果如下: array、array2的内存结构,在它们初始化的时,都是放...

  • 07.安全性、活跃性以及性能问题

    并发编程中主要的三个问题:安全性问题,活跃性问题和性能问题. 安全性问题 平时总是听到这个方法不是线程安全的,这个...

  • 并发编程-安全性、活跃性以及性能问题

    一、安全性问题 并发 Bug 的三个主要源头:原子性问题、可见性问题和有序性问题。理论上线程安全的程序,就要避免出...

  • 02.线程安全性问题

    [TOC] 安全性问题概述 什么是安全性问题 多线程情况下的安全问题,是指数据的一致性问题,在多线程环境下,多个线...

  • ** 指针的指针

    指针的指针 什么是安全释放!!

  • 数据库知识集锦

    1 事务的安全性问题

  • Java多线程-并发编程问题

    在并发编程中,需要注意的问题很多,主要有以下三个方面的问题,分别是安全性问题、活跃性问题和性能问题。 安全性问题 ...

  • 对象的创建

    1.给对象分配内存 两种方式:1.指针碰撞 2.空闲列表 2.线程安全性问题 3.初始化对象 4.执行构造方法

  • 安全性、活跃性已经性能问题

    安全性 并发编程是一个复杂的技术领域,微观上涉及到原子性问题、可见性问题和有序性问题,宏观则表现为安全性、活跃性以...

  • [C指针]安全使用指针

    学习笔记 《深入理解C指针》http://www.ituring.com.cn/book/1147第7章安全问题和...

网友评论

      本文标题:指针的安全性问题

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