내 LLVM 패스에서 가상 함수 호출 사이트를 식별하고 런타임에 호출 할 수있는 가능한 후보 함수를 식별해야합니다.llvm의 가상 호출 사이트 식별
class B
{
virtual void F() { // do something }
};
class D : public B
{
void F() { // do something else }
};
B* d = new D();
d->F();
는 F의 소정의 계층과 통화 예를 들어, 가능한 후보로서 모두 B : F 및 D : F를 식별한다.
해결책을 찾고있는 동안 Clang CFI (제어 흐름 통합)를 통해 가상 테이블 포인터가 후보 가상 테이블 포인터 집합에 있는지 확인하여 가상 테이블 포인터가 유효한 것인지 식별합니다. 따라서 상속 계층 구조에 대한 정보를 얻는 방법이 있다고 가정합니다. 그러나 나는 이것을 llvm에서하는 방법을 찾을 수 없었다.
그렇다면이 작업을 수행하는 방법에 대해 누구나 알고 있습니까?