在C ++中按地址查找变量名称

时间:2019-04-25 07:42:44

标签: c++

我需要在c ++中按地址查找变量的名称。 我不知道我可以使用什么代码? 告诉我如何解决此问题,或者C ++中是否有任何库

1 个答案:

答案 0 :(得分:1)

如果您要在运行时通过内存地址查找指定任意变量(类成员或本地变量)名称的字符串,则答案为

  • 在没有符号的二进制文件中,没有关于变量和类的原始名称的信息。
  • 我猜想在运行时库中,实现对象不包含任何其他信息,以发现该地址对应于运行时中的某个对象。对于没有虚拟表的类的对象,您甚至无法在运行时知道实际的类型。

如果问题是关于更具体的情况-当您的地址与某个已知类型的已知基地址的对象相对应时-是的,可以通过将地址与指向成员的指针进行比较来实现。示例:

struct Foo
{
    int Member1;
    double Member2;
};

enum class Member
{
    Member1,
    Member2,
    None
};

Member getMember(const Foo* baseAddress, void* address)
{
    if (address == &(baseAddress->Member1))
    {
        return Member::Member1;
    }
    else if (address == &(baseAddress->Member2))
    {
        return Member::Member2;
    }
    else
    {
        return Member::None;
    }
}