0
点赞
收藏
分享

微信扫一扫

1625_MIT 6.828 stabs文档信息整理_下


​​GreyZhang/g_unix: some basic learning about unix operating system. (github.com)​​

         继续之前的学习笔记,整理一下最近看过的一点stabs资料。

1625_MIT 6.828 stabs文档信息整理_下_MIT

         这一页中有一半的信息是Fortran专用的,直接跳过。参数的符号修饰符是p,结合英文单词很容易理解记忆。

1625_MIT 6.828 stabs文档信息整理_下_linux_02

         这一页描述了参数传递往寄存器传递的情况,其实这个在我现在接触的x86的平台上是没有的。但是,通过之前看过的资料可以知道其实现在比较流行的RISC-V其实是采用了这样的模式。

1625_MIT 6.828 stabs文档信息整理_下_JOS_03

1. 函数调用约定中,参数明确的只有两个,因此会有一些信息不能够直接得出。

2. 关于类型的描述中,内置类型其实主要就是基础C语言中的元类型。

1625_MIT 6.828 stabs文档信息整理_下_6.828_04

         类型信息在描述信息开始的段。

1625_MIT 6.828 stabs文档信息整理_下_linux_05

         这一页刚开始看的时候,可能由于最前面几页中b表征过布尔类型,因此有一点先入为主的错误理解。这其实是内置的缩写。而布尔量的表达,其实还真有一点“悬案”的感觉,定义不是很清晰。看到这一页的后半段其实正好也提到了这部分。

1625_MIT 6.828 stabs文档信息整理_下_MIT_06

         这里是关于数组的stabs信息生成,例子中的数组其实有3个元素,但是生成的信息由编译器加工后进行了4字节对齐,因此在实际的场景中占用了4个字节的信息。

         至于字符串,这个在C语言中没有的原始类型,其实本质上还是数组处理那一套。

1625_MIT 6.828 stabs文档信息整理_下_6.828_07

         类型描述符号中使用e来代表枚举类型,T描述结构体。关于结构体的部分,通过计算可以看得出来后面的数值其实是代表了空间的占用量。

1625_MIT 6.828 stabs文档信息整理_下_6.828_08

         联合的描述中没有包含作用于信息,这里的例子中能够看到一些标志等基础信息。其中,有一个-20指出来了在堆栈中的偏移量。

1625_MIT 6.828 stabs文档信息整理_下_JOS_09

         其实,数据结构或者类型这类信息跟数据对象本身不同,不会有作用域的信息存在。

1625_MIT 6.828 stabs文档信息整理_下_6.828_10

         这一页前的两个基础信息其实跟之前看到的信息类似,了解就好。这里有一个实际操作的说明,使用onjdump –stabs可以提取目标文件中分区信息。其他的编译器可能没有提供这个好用的工具,GNU的工具中是带的。

         这样,这一份文档的简单整理就结束了。剩下的额篇章还有很多,但是主要是C++以及附录。而我看这个文档本来也就是为了寻找一个行号表述的答案而已,其余的信息不去深究了。

举报

相关推荐

0 条评论