【发布时间】:2013-02-19 22:41:12
【问题描述】:
我现在正在研究 ELF 格式。我必须编写一个简单的 nm 函数(没有选项)。 我已经在输出上打印了符号的值和符号的名称。
这是 nm 输出:
value type name
0000000000600e30 D __DTOR_END__
我有相同的,但没有“类型”。我使用的是 ELF64_Sym 结构,如下:
typedef struct {
Elf64_Word st_name;
unsigned char st_info;
unsigned char st_other;
Elf64_Half st_shndx;
Elf64_Addr st_value;
Elf64_Xword st_size;
} Elf64_Sym;
我知道我必须使用 st_info 变量和这个宏:
#define ELF64_ST_TYPE(info) ((info) & 0xf)
获取符号的类型。但是,符号类型可以是如下宏:
NAME VALUE
STT_NOTYPE 0
STT_OBJECT 1
STT_FUNC 2
STT_SECTION 3
STT_FILE 4
STT_LOPROC 13
STT_HIOPROC 15
我想知道如何从这些宏中获取 nm 打印的字母,例如:
U, u, A, a, T, t, R, r, W, w
【问题讨论】:
-
也许是
switch声明? -
把这个人考虑进去 man nm(1): linux.die.net/man/1/nm