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

指针的安全性问题

作者: 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 对象是完全不可能的。

    相关文章

      网友评论

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

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