Ich implementiere einige eingeschränkte Remote-Debugging-Funktionalität für eine Anwendung geschrieben in C auf einer Linux-Box. Das Ziel besteht darin, mit der Anwendung zu kommunizieren und den Wert einer beliebigen Variablen zu suchen oder eine beliebige Funktion auszuführen.Ist es möglich zu bestimmen, ob ein Symbol eine Variable oder Funktion in C ist?
Ich bin in der Lage, Symbole durch dlsym()
Aufrufe zu suchen, aber ich kann nicht feststellen, ob die zurückgegebene Adresse bezieht sich auf eine Funktion oder eine Variable. Gibt es eine Möglichkeit, Tippinformationen über diese Symboltabelle zu ermitteln?
plattformabhängig, aber Sie können mit 1.er Prüfung der Adresse (Raum), oder 2. durch die Suche nach einer besonderen Funktion Startcode (Trampoline, etc.) –
oder 3. ziehen Sie die Informationen aus wegkommen der DWARF-Debuginformationen, falls verfügbar (was nicht trivial ist) – nos
Debuginformationen sind für diese Anwendung nicht verfügbar; Die Anwendung ist so groß, dass der Versuch, mit Debugging-Informationen zu kompilieren, alle abstürzt, die versuchen, sie zu lesen (gdb) – dykeag