为什么 nm 在 .o 文件中隐藏 .rela.eh_frame 和 .rela.text?
Why nm hides .rela.eh_frame and .rela.text in .o files?
我试图在 C 中重新创建命令 nm
的行为,虽然我成功获得了符号和部分的名称,但我发现我的版本中出现了一些额外的名称。
$> ./my_nm -a obj.o
0000000000000000 b .bss
0000000000000000 n .comment
0000000000000000 d .data
0000000000000000 r .eh_frame
0000000000000000 n .note.GNU-stack
0000000000000000 r .note.gnu.property
0000000000000000 d .rela.eh_frame
0000000000000000 d .rela.text
0000000000000000 t .text
U _GLOBAL_OFFSET_TABLE_
0000000000000000 T elf64_syms
0000000000000000 a elf64_syms.c
U malloc
$> nm -a obj.o
0000000000000000 b .bss
0000000000000000 n .comment
0000000000000000 d .data
0000000000000000 r .eh_frame
0000000000000000 n .note.GNU-stack
0000000000000000 r .note.gnu.property
0000000000000000 t .text
U _GLOBAL_OFFSET_TABLE_
0000000000000000 T elf64_syms
0000000000000000 a elf64_syms.c
U malloc
我对它们做了一些研究,发现它们是对某个部分或符号的某种引用。我想知道他们有没有什么特别之处。如果是这样,我如何区分它们和其他 .rela...
?
I find out that some extra names appear in my version.
Linuxnm
版本使用libbfd
,将不同的目标文件格式映射到自己的内部数据模型,然后nm
打印该内部表示。
libbfd
早于 ELF
至少 2 个十年,其内部模型 不足以 表示 ELF
格式的复杂性(事情在翻译中丢失了)。
出于这个原因,通常不应该使用nm
、objdump
和其他基于libbfd
的工具来检查ELF
文件(改用 readelf
,它显示 原样 ,没有翻译损失。
所以,您没有做错并且您的nm
版本更好。
我试图在 C 中重新创建命令 nm
的行为,虽然我成功获得了符号和部分的名称,但我发现我的版本中出现了一些额外的名称。
$> ./my_nm -a obj.o
0000000000000000 b .bss
0000000000000000 n .comment
0000000000000000 d .data
0000000000000000 r .eh_frame
0000000000000000 n .note.GNU-stack
0000000000000000 r .note.gnu.property
0000000000000000 d .rela.eh_frame
0000000000000000 d .rela.text
0000000000000000 t .text
U _GLOBAL_OFFSET_TABLE_
0000000000000000 T elf64_syms
0000000000000000 a elf64_syms.c
U malloc
$> nm -a obj.o
0000000000000000 b .bss
0000000000000000 n .comment
0000000000000000 d .data
0000000000000000 r .eh_frame
0000000000000000 n .note.GNU-stack
0000000000000000 r .note.gnu.property
0000000000000000 t .text
U _GLOBAL_OFFSET_TABLE_
0000000000000000 T elf64_syms
0000000000000000 a elf64_syms.c
U malloc
我对它们做了一些研究,发现它们是对某个部分或符号的某种引用。我想知道他们有没有什么特别之处。如果是这样,我如何区分它们和其他 .rela...
?
I find out that some extra names appear in my version.
Linuxnm
版本使用libbfd
,将不同的目标文件格式映射到自己的内部数据模型,然后nm
打印该内部表示。
libbfd
早于 ELF
至少 2 个十年,其内部模型 不足以 表示 ELF
格式的复杂性(事情在翻译中丢失了)。
出于这个原因,通常不应该使用nm
、objdump
和其他基于libbfd
的工具来检查ELF
文件(改用 readelf
,它显示 原样 ,没有翻译损失。
所以,您没有做错并且您的nm
版本更好。