Ich muss virtuelle Funktionsaufrufe in meinem LLVM-Durchlauf identifizieren sowie mögliche Kandidatenfunktionen identifizieren, die zur Laufzeit aufgerufen werden können.Identifizieren von virtuellen Anruforten in llvm
class B
{
virtual void F() { // do something }
};
class D : public B
{
void F() { // do something else }
};
B* d = new D();
d->F();
beispielsweise für die gegebene Hierarchie und Aufruf von F, identifizieren sowohl B :: F und D :: F als mögliche Kandidaten. Während ich nach einer Lösung suchte, stieß ich auf Clang CFI (Kontrollflussintegration), wo sie sagten, dass sie identifizieren, ob ein virtueller Tabellenzeiger ein gültiger ist, indem sie überprüft, ob sie in einer Menge von möglichen virtuellen Tabellenzeigern enthalten ist. Daher nehme ich an, dass es eine Möglichkeit gibt, diese Informationen über die Vererbungshierarchie zu erhalten. Aber ich konnte nichts finden, wie man das in llvm machen könnte.
Hat also jemand eine Idee, wie das gemacht werden könnte?