C 如何读取nm输出?

C 如何读取nm输出?,c,linux,nm,C,Linux,Nm,这是我的密码: int const const_global_init = 2; int const const_global; int global_init = 4; int global; static int static_global_init = 3; static int static_global; static int static_function(){ return 2; } double function_with_param(int a){ sta

这是我的密码:

int const const_global_init = 2;
int const const_global;
int global_init = 4;
int global;

static int static_global_init = 3;
static int static_global;

static int static_function(){
    return 2;
}

double function_with_param(int a){
    static int static_local_init = 3;
    static int static_local;

    return 2.2;
}

int main(){
}
我生成
main.o
并尝试理解
nm
输出。使用
nm main.o--printfile name-a
后,我得到以下输出:

main.o:0000000000000000 b .bss
main.o:0000000000000000 n .comment
main.o:0000000000000004 C const_global
main.o:0000000000000000 R const_global_init
main.o:0000000000000000 d .data
main.o:0000000000000000 r .eh_frame
main.o:000000000000000b T function_with_param
main.o:0000000000000004 C global
main.o:0000000000000000 D global_init
main.o:0000000000000027 T main
main.o:0000000000000000 a main.c
main.o:0000000000000000 n .note.GNU-stack
main.o:0000000000000000 r .rodata
main.o:0000000000000000 t static_function
main.o:0000000000000000 b static_global
main.o:0000000000000004 d static_global_init
main.o:0000000000000004 b static_local.1733
main.o:0000000000000008 d static_local_init.1732
main.o:0000000000000000 t .text
我理解第二栏和第三栏,但我真的不知道第一栏是什么,是地址还是尺寸?我知道一些关于
.bbs
.comment
.data
.text
段的想法,但它是什么
.eh_frame
.note.GNU stack
.rodata

。。。我真的不知道第一栏是什么,是地址还是尺寸

我的本地手册页(来自
man nm
)显示

也就是说,第一列是符号的“值”。为了理解这意味着什么,了解一些关于ELF和运行时链接器的知识是很有帮助的,但一般来说,它只是相关部分的一个偏移

了解ELF也有助于了解其他要点:
manelf
告诉我们,
.rodata
部分是只读数据(即:硬编码到程序中的常量值永远不会更改。字符串文字可能会出现在此处)

.eh_frame
用于异常处理和其他调用堆栈帧元数据(搜索
eh_frame
作为第一次点击)

DESCRIPTION
       GNU nm lists the symbols from object files objfile....  If no object files are listed as arguments, nm assumes the file a.out.

       For each symbol, nm shows:

       ·   The symbol value, in the radix selected by options (see below), or hexadecimal by default.