|
发表于 2015-4-19 11:25:52
|
显示全部楼层
本帖最后由 QQ[我在线上] 于 2015-4-19 11:30 编辑
这主要是关于一个编译的安全性,
首先要知道程序内部有一个结构,用来保存语言的寻址方式和维护一些隐式的描述表,假设这个描述表被你访问并且破坏掉,那么你的 *a 所指向的内存或许没问题,那么真正的问题是 *(a +1) 这个地址的方向, 是向上找还是向下找,是 加一个字节还是 加四个字节,并且这里存不存在结构体对齐,
就结果而言,你会发现,最好的维护方法就是编译成你已经申请的内存空间,假设你指向的是一块系统的空间,如果不被你操作,那么将会丢失它的可用性,但是问题来了,如何申请一个指向系统的空间的指向?这需要你和系统打交道.在很开始学习 scanf 输入字符串的时候或许你已经早已经遇到这个问题,但是一般都是省略而过,不过还是告诉你存在这个问题,如果解释这个问题,会引出很多理论,包括系统变成和编译原理.所以,如果要深入这个问题,建议去看看有关的书籍,如果单纯是学习语言编程,就不用纠结这个问题,看到有类似情况的话,想办法躲避,
但个人认为,很多时候都不会采用这类编程
内存是一个线性结构,不存在三维空间或者多维空间,申请的空间一般都是按照程序内部结构维护,所以反编译的时候你会发现,它是一个有序的线性数据
|
|