首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何读取nm输出?

如何读取nm输出?
EN

Stack Overflow用户
提问于 2016-04-20 22:18:11
回答 1查看 16.1K关注 0票数 14

这是我的代码:

代码语言:javascript
复制
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之后,我得到了以下输出:

代码语言:javascript
复制
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呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-20 22:32:35

...我真的不知道第一列是什么,是地址还是大小?

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

代码语言:javascript
复制
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.

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

了解ELF的一些知识也会对其他方面有所帮助:man elf告诉我们,.rodata部分是只读数据(即:硬编码到程序中的永远不会改变的常量值。字符串字面值可能在这里)。

.eh_frame用于异常处理和其他调用堆栈帧元数据(对eh_frame的搜索将this question作为第一个命中)。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36746688

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档