2013-02-21 8 views
1

Microsoft 심볼 이름의 장식을 해제하기 위해 dbghelp의 UnDecorateSymbolNameW을 사용하고 있습니다. UNDNAME_COMPLETE으로 데코 레이팅 할 때 기호 이름에 때로는 이해할 수있는 일부 컴파일러 추가 정보가있을 수 있습니다. 예를 들어 vftable 기호는 for 키워드와 클래스/인터페이스 이름이 뒤에 오는 중괄호 블록을 가질 수 있습니다.장식되지 않은 Microsoft Symbol : SomeClass ::`vftable '{Foo :: Bar'}

SomeClass :: 'vftable'{에 대한 '푸 :: 바'}

아무도 이름의 "{for 'Foo::Bar'}" 부분이 무엇을 의미하는지에 나를 알릴 수 있습니까?

또한 누구나이 문서에 대해 알고 있으므로 아무 것도 찾을 수 없으므로 읽을 수 있습니다.

대단히 감사합니다.

+0

당신이이 변경 될 수 있습니다 컴파일러 구현 세부 사항이며, 문서화 찾을하지 않을 수 있습니다. 클래스는 다중 상속으로 인해 하나 이상의 v-table을 가질 수 있습니다. 후위 기호는 심볼이 고유한지 확인합니다. –

답변

2

클래스 SomeClass은 다중 상속을 사용하며 가상 메소드가있는 여러 기본 클래스가 있습니다. 따라서 SomeClass에는 가상 메소드가있는 기본 클래스마다 하나씩 여러 vtable이 필요합니다. {for 'Foo::Bar'}은 가지고있는 vtable을 알려줍니다. 이 경우 Foo::Bar 기본 클래스의 vtable입니다.

는 (이 이름에서 자명되어 있어야합니다.)

+0

네가 철자를 쓰면 고마워, 네. 이 물건에 대한 문서가 없다는 사실을 부끄러워하십시오. 다시 한번 감사드립니다. – Bobby

+0

이것은 모든 컴파일러 내부 기능입니다. 컴파일러 내부의 내용은 언제든지 변경 될 수 있으므로 문서화되지 않는 경향이 있습니다. –

+0

필자는 가능한 한 심볼에서 많은 정보를 파싱하여 무언가를위한 메타 모델을 생성하려고 노력하고 있습니다. 따라서이 내용의 스펙이 저에게 흥미 롭습니다. 하지만 왜 공식 사양/문서를 사용할 수 없는지 이해합니다. – Bobby