闲谈编程之 内存
来源:互联网 发布:ubuntu安装chrome 编辑:程序博客网 时间:2024/05/01 15:21
——内存是对一堆晶体管的连续抽象
http://baike.baidu.com/view/30363.htm
a = 0;
a是一个符号,它有自己的真实地址,如果a是int型,并且在32位环境下,内存中将有4个字节变为0值,符号a在编译后将不复存在,替代它的将是一个固定的地址(如果生明为全局变量或者局部static变量)或者一个相对地址(函数内部的自动变量),这就是为何编译后的程序,没法还原为原始的程序代码。
当你想要运行一个程序,是操作系统把程序的映像读入了内存,这个映像是有固定的格式的,(察看资料http://baike.baidu.com/view/8358.htm#9
如果程序A和程序B同时访问地址01000,会发生什么?前面提到,每个程序都以为自己拥有整个足球场,所以A和B都会得到他自己想要的东西,而不会发生任何冲突,这就是虚拟内存技术从Intel 386 cpu开始,这种技术已经开始发展,虚拟内存需要CPU和操作系统同时支持。
可能你碰到过这种情况,某一个程序在运行时,突然蹦出一个对话框,告诉你程序即将关闭,因为xxxxx内存不能写入,这是因为,操作系统把内存分类——有的只能读(程序段),有的可读可写(数据段),出现上述原因,可能是一个未被初始化的指针指向了程序段,并且对指针指向的内存执行写入的操作,于是操作系统不让了,扔给你一个保护错误。
但是,仍然有可能,在数据段上写入一段有意义的程序,并且在函数返回,出栈的时候改变IP:CS指向为那一段有意义的程序(可能是一个木马,病毒的引导程序),这种方法,一般叫做缓冲区溢出攻击,攻击的方法各种各样,就像鸡蛋饼有各种做法,最初的gets()函数就被攻击过,比如向一个100个字节的数组中写入200个字节,后100个字节刚好落在程序段,当然还有一些了不起的小技巧才能欺骗cpu去执行这段非法入侵的代码。
- 闲谈编程之 内存
- 闲谈编程之 Java内部类
- Java之美之Java内存溢出闲谈解决方案
- JVM-内存泄漏闲谈
- 闲谈之论
- 学会改变之闲谈
- spring之闲谈
- 闲谈嵌入式编程的复杂性
- 【闲谈】软件编程21法则
- 闲谈嵌入式编程的复杂性
- 闲谈
- 闲谈
- 闲谈
- 闲谈
- 闲谈
- 闲谈
- 闲谈
- 闲谈
- iOS中协议(Protocol)的简单用法
- 关于java和.net中string string[] arraylist的相互转化
- 第3周 项目1 - 顺序表的基本运算
- Latent Semantic Analysis(LSA/ LSI)算法简介
- #import <Cocoa/Cocoa.h> 报错 Lexical or Preprocessor Issue 'Cocoa/Cocoa.h' file not found
- 闲谈编程之 内存
- CentOS 6.6源码编译升级GCC至4.8.2
- web服务器之LNMP(1)Ubuntu中Nginx的安装与配置
- Extjs4中up()和down()的用法
- @dynamic关键字
- SVG小记——SVG Sprites
- JSP:九大内置对象
- 【Linux】test命令
- Google Protocol Buffers介绍和总结