符号
类型 说明
A 该符号的值是绝对的,在以后的链接过程中,不允许进行改变。这样的符号值,常常出现在中断向量表中,例如用符号来表示各个中断向量函数在中断向量表中的位置。
B 该符号的值出现在非初始化数据段(bss)中。例如,在一个文件中定义全局static int test。则该符号test的类型为b,位于bss section中。其值表示该符号在bss段中的偏移。一般而言,bss段分配于RAM中
C 该符号为common。common symbol是未初始话数据段。该符号没有包含于一个普通section中。只有在链接过程中才进行分配。符号的值表示该符号需要的字节数。例如在一个c文件中,定义int test,并且该符号在别的地方会被引用,则该符号类型即为C。否则其类型为B。
D 该符号位于初始话数据段中。一般来说,分配到data section中。例如定义全局int baud_table[5] = {9600, 19200, 38400, 57600, 115200},则会分配于初始化数据段中。
G 该符号也位于初始化数据段中。主要用于small object提高访问small data object的一种方式。
I 该符号是对另一个符号的间接引用。
N 该符号是一个debugging符号。
R 该符号位于只读数据区。例如定义全局const int test[] = {123, 123};则test就是一个只读数据区的符号。注意在cygwin下如果使用gcc直接编译成MZ格式时,源文件中的test对应_test,并且其符号类型为D,即初始化数据段中。但是如果使用m6812-elf-gcc这样的交叉编译工具,源文件中的test对应目标文件的test,即没有添加下划线,并且其符号类型为R。一般而言,位于rodata section。值得注意的是,如果在一个函数中定义const char *test = “abc”, const char test_int = 3。使用nm都不会得到符号信息,但是字符串“abc”分配于只读存储器中,test在rodata section中,大小为4。
S 符号位于非初始化数据区,用于small object。
T 该符号位于代码区text section。
U 该符号在当前文件中是未定义的,即该符号的定义在别的文件中。例如,当前文件调用另一个文件中定义的函数,在这个被调用的函数在当前就是未定义的;但是在定义它的文件中类型是T。但是对于全局变量来说,在定义它的文件中,其符号类型为C,在使用它的文件中,其类型为U。
V 该符号是一个weak object。
W The symbol is a weak symbol that has not been specifically tagged as a weak object symbol.
- 该符号是a.out格式文件中的stabs symbol。
?
分享到:
相关推荐
通过 `nm` 命令,用户可以方便地查看文件中的符号信息,这对于调试程序、理解链接过程以及进行更深层次的系统编程工作都非常有用。 #### 二、NM 命令的常用参数 `nm` 命令提供了丰富的选项来定制输出结果,以下是...
**nm命令详解** `nm`命令在Unix-like操作系统中是一个非常重要的工具,主要用于查看目标文件(.o)或可执行文件中的符号信息。这个项目,名为`ft_nm`,旨在重新实现`nm`命令,专注于OS X和Linux系统中处理二进制...
我们将会详细介绍`grep`命令的基本用法,结合具体示例来解释如何高效地在库文件中查找特定的符号,并对涉及到的相关概念进行阐述。 ### 一、grep 命令简介 `grep`是GNU项目提供的一个强大的文本搜索工具,它能够在...
### DC综合脚本命令知识点详解 #### 一、概述 Design Compiler(简称DC)是Synopsys公司提供的一款用于数字电路逻辑综合的工具。通过DC工具可以将RTL级的Verilog或VHDL代码转换为门级网表,进而进行布局布线前的...
nm(names)命令用于显示二进制文件中的符号表。 #### nohup=NoHangUP nohup(No Hang UP)命令用于在后台运行命令,即使用户退出也不会受到影响。 #### nroff=NewROFF nroff(New Roff)是一个文本格式化工具(text ...
这些工具在编译过程中起着关键作用,例如,nm可以查看编译后的目标文件中的符号表,readelf则可以提供关于ELF格式文件的详细信息。 GCC的编译选项丰富多样,可以用于控制优化级别、指定输出文件、链接库等。比如,...
### Linux基础命令详解 在IT领域,特别是对于系统管理员、开发者以及任何与服务器打交道的人来说,掌握...以上就是Linux基础命令的一些详细解释,这些命令在日常工作中非常实用,熟练掌握它们能够极大地提高工作效率。
3. **nm**:这是一个二进制符号查看器,用于查看可执行文件和库中的函数和变量。这对于调试和分析程序的内部结构非常有用。 4. **nohup**:当命令在后台运行时,如果用户退出终端,nohup命令可以防止该命令被挂起。...
### Linux ar 命令详解及应用实例 #### 概述 `ar` 是 Linux 下一个用于处理归档文件(通常扩展名为 .a)的强大工具。它可以用来创建、修改库文件,或者从中提取单个模块。库文件本质上是一个包含其他文件(称为库...
cmp用于比较内存区域,cp用于复制内存区域,mm用于修改内存内容,mtest用于测试内存,mw用于填充内存区域,nm用于显示符号信息,md用于显示内存内容,bdinfo用于显示板信息,ping命令用于测试网络连通性,TFTP命令...
### Linux命令与Shell编程知识点详解 #### 一、Linux基础命令 在Linux环境中,掌握一系列基本命令对于系统管理和日常操作至关重要。以下是一些常见的Linux命令及其功能: 1. **`man`**: 手册命令,用于查询其他...
- 使用`nm`命令,开发者可以在目标文件或可执行文件中查看这些混淆后的函数名称,以便于调试或逆向工程。 2. **Epic(史诗任务)**: - 在敏捷开发方法中,Epic是一种大型的需求或用户故事,通常太大而不能直接放...
85. **nm=names**:显示符号表。 86. **nohup=NoHangUP**:使进程在用户退出后仍继续运行。 87. **nroff=NewROFF**:排版工具。 88. **od=OctalDump**:显示文件的八进制转储。 89. **pass=PassWordSafe**:密码管理...
**nm** 用于显示目标文件中的符号表,帮助开发者分析程序中的符号信息。 考虑以下示例程序: 1. **main.c**: ```c int main(int argc, char* argv[]) { hello(); bye(); return 0; } ``` 2. **hello.c**:...
- **`50408 + 415320 Bytes symbol space free`**:表示编译过程中使用的符号空间情况。 - **`0 Warning Errors`**:没有警告信息。 - **`0 Severe Errors`**:没有严重错误。 3. **链接命令说明**: - **`Run...
通过 `nm` 命令或 `objdump -t` 命令,可以查看目标文件或执行文件中的符号信息。 #### 七、内存地址的处理 每个输出节有两种地址:虚拟内存地址(VMA)和加载内存地址(LMA)。VMA 表示节在运行时的内存地址,而 ...
2. **nm**:列出对象文件中的符号。 - 这个工具对于理解程序中的符号定义非常有用。 3. **objcopy**:复制并转换对象文件。 - 可以用于将二进制数据从一种格式转换到另一种格式。 4. **objdump**:显示对象文件...
- **nm**:显示目标文件的符号信息,有助于理解程序的动态链接。 - **ldd**:检查程序的动态链接库依赖,确保所有库都已正确加载。 - **lsof**:列出打开的文件和网络连接,排查资源占用问题。 - **dmesg**:显示...