Linux 如何从elf中提取枚举信息?
要从elf文件获取枚举信息。无法从.rodata或.data或.bss节获取信息 1、Linux 如何从elf中提取枚举信息?,linux,elf,Linux,Elf,要从elf文件获取枚举信息。无法从.rodata或.data或.bss节获取信息 1、 g++-o测试.cc 2、 objdump-s-j.rodata t或objdump-s-j.data t 不显示有关枚举成员数据的任何信息 gcc版本:4.7.2和linux centos6 namespace test { namespace error { enum { kUnkown = -1, kSuccess
g++-o测试.cc
2、 objdump-s-j.rodata t
或objdump-s-j.data t
不显示有关枚举成员数据的任何信息
gcc版本:4.7.2和linux centos6
namespace test {
namespace error {
enum {
kUnkown = -1,
kSuccess = 0,
kInvalidParams = 1,
kDBInitFailed = 2,
kTimeout = 3,
kAttributeInitFailed = 4,
kPageCacheInitFailed = 5,
kUpdate = 9001,
};
} // namespace error
}
int main()
{
return 0;
}
要从elf文件获取枚举信息。无法从.rodata或.data或.bss节获取信息
enum
是类型声明,而不是对象。它在内存中没有任何存在
(这同样适用于结构
或联合
,或大多数类
es。)
如果在编译程序时启用了调试符号(-g
),则可能有一些调试信息引用了enum
。但是,在运行时不使用该数据。正确。但它肯定存在于debuginfo中。请参见eu readelf--debug dump=info my executable或lib | grep-A 3 my_ENUM_SYMBOL
。它出现在.debug\u info
部分。请注意,这仅适用于trueenum
s;用于定义常量的宏不可用,除非使用-g3
或-ggdb3
编译,然后需要使用.debug\u宏
部分。。。你必须处理扩展宏并自己评估它,这一点都不有趣。