如何从精灵中提取枚举信息?

How extract enum info from elf?

想从 elf 文件中获取枚举信息。无法从 .rodata 或 .data 或 .bss 部分获取信息。

1、 g++ -o t test.cc

2、objdump -s -j .rodata tobjdump -s -j .data t 不显示枚举成员数据。

gcc 版本:4.7.2 和 linuxcentos6

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;
}   

want to get enum info from elf file. cannot get info from .rodata or .data or .bss section.

enum 是类型声明,不是对象。它在内存中没有任何存在。

(同样适用于 structunion,或大多数 class。)

如果您在启用调试符号 (-g) 的情况下编译程序,可能会有一些调试信息引用 enum。但是,该数据不会在运行时使用。