C专家编程 第6章 运动的诗章:运行时数据结构 6.1 a.out及其传说
运动的诗章:运行时数据结构
编程语言理论的经典对立之一就是代码和数据的区别。有些语言(如Lisp)把二者视为一体。其他语言(如C语言)通常维持两者的区别。Internet蠕虫非常难以被人们所理解,因为它的攻击方式的原理就是把数据转换为代码。代码和数据的区别也可以认为是编译时和运行时的分界线。编译器的绝大部分工作与翻译代码有关;必要的数据存储管理的绝大部分在运行时进行。本章描述运行时系统中隐藏的数据结构。
学习运行时系统的3个理由:
*它有助于优化代码,获得最佳的效率;
*它有助于理解更高级的内容;
*当陷入麻烦时,它可以使分析问题更加容易。
a.out它是“assembler output”(汇编程序输出)的缩写形式!
UNIX中的可执行文件也是以一种特殊的方式加上标签,这样系统就能确认它们的特殊属性。为重要的数据定义标签,用独特的数字唯一地标识该数据是一种普遍采用的编程技巧。
超级块(superblock,UNIX文件系统中的基础数据结构)就是用下面这个神奇数字唯一标识的:
#define FS_MAGIC 0x011954
这个数字是Kirk McKusick的生日。Kirk是Berkeley fast文件系统的实现者,上面这个神奇数字仍然在source base中使用(位于文件sys/fs/ufs_fs.h)。
在a.out文件中也存在类似的神奇数字。在AT&T的UNIX System V发布之前,a.out文件被标识为神奇数字0407,偏移为零。0407是PDP-11一条无条件转移指令(相对于程序计数器)的二进制编码!如果在兼容模式下运行PDP-11或VAX,可以先执行文件的第一个字,然后这个神奇数字(位于那里)会带你跳过a.out文件,进入程序第一个真正的可执行指令。在SVr4中,可执行文件用文件的第一个字节来标注,文件以十六进制7F打头,紧跟在后面的第二至第四字节为“ELF”。
C专家编程 第6章 运动的诗章:运行时数据结构 6.1 a.out及其传说相关推荐
- C专家编程 第6章 运动的诗章:运行时数据结构 6.3 操作系统在a.out文件里干了些什么
操作系统在a.out文件里干了些什么 为什么a.out要以段的形式组织.段可以方便地映射到链接器在运行时可以直接载入的对象中!载入器只是取文件中的每个段的映像,并直接将它们放入到内存中.从本 ...
- objective-c 编程总结(第六篇)运行时操作 - 方法交换
objective-c 编程总结(第六篇)运行时操作 - 方法交换 后面主要介绍oc类的运行时行为.这里面包括运行时方法的更换,消息的转发,以及动态属性.这些对于面向方面编程AOP的热爱者还是很有用的 ...
- 《C专家编程》第二章——这不是Bug,而是语言特性
无论一门语言有多么流行或多么优秀,它总是存在一些问题,C语言也不例外.本章讨论的重点是C语言本身存在的问题,作者煞费苦心的用一个太空任务和软件的故事开头,也用另一个太空任务和软件的故事结尾,引人入胜. ...
- C专家编程 第10章 再论指针 10.7 使用指针创建和使用动态数组
使用指针创建和使用动态数组 当预先并不知道数据的长度时,可以使用动态数组.绝大多数具有数组的编程语言都能够在运行时设置数组的长度.它们允许程序员计算需要处理的元素的数目,然后创建一个刚好能容纳 ...
- C专家编程--读书笔记六 运行时数据结构
第六章 一.知识点 1.代码和数据的区别也可以认为是编译时和运行时的分界线.编译器的绝大部分工作都跟翻译代码有关:必要的数据存储管理的绝大部分都在运行时进行.(P121) 2."a.out& ...
- C专家编程 第11章 你懂得C,所以C++不再话下 11.1 初识OOP
C++之于C,就像Algol-68之于Algol ---David L.Jones 如果你觉得C++还不够复杂,那你知道protected abstract virtual ...
- C专家编程 第1章 C:穿越时空的迷雾 1.4 KR C
时间:1978 人物:Steve Johnson 事件:编写了pcc这个可移植的C编译器 影响:形成了一代C编译器的基础. C语言的演化之路如图1-2所示. 1973-3(早期的C)--->19 ...
- C专家编程 第8章 为什么程序员无法分清万圣节和圣诞节 8.2 根据位模式构筑图形
根据位模式构筑图形 图标(icon)或者图形(glyph)是一种小型的位模式映射于屏幕后产生的图像.一个位表示图像上的一个像素.如果一个位被设置,那么它所代表的像素就是"亮" ...
- 《C专家编程》1-2章阅读收获
一. C诡异离奇,缺陷重重,却获得了巨大的成功. ·编译器设计:效率(几乎)就是一切.编译器的效率包括两个方面:运行效率(代码的运行速度)和编译效率(产生可执行代码的速度). 除了开发和学习环境外,运 ...
最新文章
- R语言决策树、bagging、随机森林模型在训练集以及测试集的预测结果(accuray、F1、偏差Deviance)对比分析、计算训练集和测试集的预测结果的差值来分析模型的过拟合(overfit)情况
- oracle入门学习(3) 所用的学习环境介绍与设置
- WPF游戏,使用move游戏开发
- Wordpress 模版技术手册 - WordPress Theme Technical manuals
- 小码农也有大梦想!最小公倍数java算法
- PHRefreshTriggerView
- vs中四点画矩形的算法_实战基于图割算法的木材表面缺陷图像分析
- 【Axure交互教程】 滑动拼图验证登录效果
- cad延伸命令怎么用_原来我们都用错了CAD直线命令,你不能忽视的CAD直线绘制技巧详解...
- 利用input[type=range]制作一个简易的音乐播放器
- 中国金融市场目前存在的金融牌照总结
- 【Excle数据透视表】如何移动数据透视表的位置
- Swing交通罚单管理系统java车辆违章缴费金额查询交警信息jsp源代码Maven数据库mysql
- 注册IMDB的API KEY
- 推荐系统 之 AFM和DIN
- 传输层协议TCP和UDP的区别详解
- c语言中优先级劣后级,详解基金中优先级和劣后级的区别
- opencv学习记录——(5)图像像素的操作
- SSL证书快速部署到服务器WebServer
- HTML页面如何判断是手机访问还是电脑访问