panorama
计算机专业的同学应该都听过一本书,深入理解计算机系统(CSAPP)
其实我很早就开始读了,但是只是囫囵吞枣,根本不知所云,于是便放弃了一段时间。
现在经历了许多(并非),对许多名词有了一些概念后,我又重新翻开了这本书,发现许多地方豁然开朗,今天将第一章,计算机系统漫游,也就是标题所说的panorama,总结一下,以遍展开后续的学习。
以这本书的方式,从你的第一个程序hello的生命周期说起,我们来开始对系统的学习
1 | |
hello这个程序,从被你用编辑器创建,到在系统运行,再到输出信息,最后中止,中间发生了什么?
首先你用某个编辑器创建了文件hello.c,写下代码,并保存,其被称为源程序,储存在磁盘中,实际上就是一个由值0和1组成的位(又称比特bit)序列,每8个位被称为一个字节,每个字节表示程序中的某些文本字符。
字符如何和字节所代表的数字序列对应呢,通常采用ASCII标准用数字来表示文本字符,二者一一对应

现在,你应该理解了一个基本思想,计算机系统中所有的信息,无论是磁盘文件,内存中的程序,还是网络上传送的数据,都不过是一串比特。区分不同数据对象的唯一方法是我们读到的这些数据的上下文,在不同的上下文中,一个同样的字节序列可能会有不同的含义,这点要注意。
那么hello.c是怎么变成可执行文件hello的呢?

如图所示,hello.c经过预处理,编译,汇编,链接,最终得到我们的可执行文件hello
我就直接引用原文了


其中,编译涉及到优化程序的性能,链接过程我是通过pwn中ret2dlresolve这种攻击方式才得以理解,涉及链接过程的细节与机制,以及各种安全问题,可以参考我的另一篇博客,虽然我还没写…
到这里,便得到了可执行文件hello,接下来运行它时发生了什么?
在终端中可以看到
1 | |
累了,休息,有空再写…
暂时懒得写
以后再说!
加油!
2026.3.22
似乎目前来看有点过于基础了
我还是太拖延了
procrastination😭
以后见啦~