Скажет, у меня есть простой класс, как показано ниже:Получить спецификатор доступа для метода класса из PDB через DbgHelp?
class Foo
{
public:
Foo(){};
protected:
int meth1(void){return 0;};
public:
int var1;
};
Составлены с MSVC и разбором соответствующего PDB через DbgHelp API, я могу перебрать ребенок и разобрать методы и переменные хорошо, но я Я не могу понять, как я определяю спецификатор доступа для данного ребенка. Мой код выглядит примерно так:
// The symbol tag for 'index' is a SymTagEnum::SymTagBaseClass
DWORD item_count;
if(!::SymGetTypeInfo(process, base_address, index, TI_GET_CHILDRENCOUNT, &item_count))
break;
if(item_count > 0)
{
TI_FINDCHILDREN_PARAMS * item_indexs = new TI_FINDCHILDREN_PARAMS[item_count];
item_indexs->Count = item_count;
item_indexs->Start = 0;
if(::SymGetTypeInfo(process, base_address, index, TI_FINDCHILDREN, item_indexs))
{
for(DWORD i=0 ; i<item_count ; i++)
{
DWORD item_tag;
if(!::SymGetTypeInfo(process, base_address, item_indexs->ChildId[i], TI_GET_SYMTAG, &item_tag))
break;
DWORD item_type_index;
if(!::SymGetTypeInfo(process, base_address, item_indexs->ChildId[i], TI_GET_TYPEID, &item_type_index))
break;
// XXX: How to discover the access specifier (public, private, protected) for
// the class method/variable at 'item_type_index'?
switch(item_tag)
{
case SymTagEnum::SymTagFunction:
{
// parse out the class method at 'item_type_index'
break;
}
case SymTagEnum::SymTagData:
{
// parse out the class variable at 'item_type_index'
break;
}
default:
{
break;
}
}
}
}
}
Можно ли определить спецификаторы доступа (государственные, частные, защищенные) для классов детей через DbgHelp API, и если да, то каким образом?
Спасибо, я знаком с UnDecorateSymbolName, но не знаю, как вытащить украшенное имя из символа с помощью индекса символа и API dbghelp? – QAZ
Имеет ли это что-нибудь вообще, чтобы открыть доступность, предмет вопроса? Очевидно, что вам нужно будет сначала получить имя функции. –