全部学习汇总: GreyZhang/g_unix: some basic learning about unix operating system. (github.com)
前面为了完成MIT 6.828的堆栈信息解析大概看了一下这个文档,现在把看过的信息简单整理一下。
1. stabs主要是为调试器提供调试信息用的描述数据,最早是由加州大学伯克利分校设计发明的。
2. 对于C语言来说,用到的功能在这个文档中已经比较全面了。
3. 如果使用gcc,相应的信息可以通过gcc –g的选项来生成。但是汇编器和链接器可能会对此信息进行略微的修改。
4. 在接触linux环境进行命令行下的编译的时候,接触到过一个a.out文件。看起来,这个文件的信息有很多就是继承自stabs。
5. 常见的格式主要是有四种。
1. 字符串区域是调试信息存储的主要部分。从表现形势看,有一种哈希表的感觉。
2. 符号描述符是一个字符的信息,跟在冒号之后。如果没有这部分信息,通常来说是局部量。
3. 接下来的类型属性通过简单的字符猜测概念基本都可以猜测到,比较有利于联想记忆。
1. 程序的编码结构主要包括主函数名称、源文件、包含的文件名称、行号、进程名、类型以及代码的开始与结尾。
2. desc中通常会带有信息说明这个文件使用的是什么编程语言。
1. 有些编译器生成的信息会包含目录信息;
2. N_SOL主要用来处理包含的文件信息。
1. 这一页最开始的地方其实是我学习这个课程最需要找的部分,也就是GCC工具链生成的结果文件中行号存储在什么地方。
2. 函数或者进程,可以通过字母F符号类型来表达。大小写分别代表全局或者局部的属性。
3. 这里提到了一个ELF查找信息会慢的结论,为什么?可能得再细致读一下ELF的编码才会好理解。
4. 什么是一个进程呢?在C语言中其实是有一个明确的概念的,那就是返回值是void的函数用来设计进程。
1. 最开始的这一页写错了,main应该是一个返回类型值为1的函数。
2. 关于嵌套的表达可以解释为:baz包含于bar,而bar包含于foo。
常数的表达用C描述符加上一系列类型属性值来表达。
1. auto类型的量可能在寄存器中也可能在stack中。
2. G描述符用来表示全局变量的属性。
1. 这里提到的寄存器类型以及Fortran等,我现在基本接触不到用不到,跳过了。后面的文档中,类似的信息我也跳过了一大部分。
2. 静态量中,s代表其作用于是文件范围的,而v代表其作用是函数范围的。但是,这样的信息在elf中的描述方式不同。
这一份文件的内容,即使是暂时摘取了一些用得上的内容也很多。暂且整理这么多,我跳过了整个C++的篇章以及附录,因此后面的部分应该可以再来一份笔记整理完。