Sto implementando alcune funzionalità di debug remoto remoto per un'applicazione scritta in C in esecuzione su una macchina Linux. L'obiettivo è comunicare con l'applicazione e cercare il valore di una variabile arbitraria o eseguire una funzione arbitraria.È possibile determinare se un simbolo è una variabile o una funzione in C?
Sono in grado di cercare i simboli tramite le chiamate dlsym()
, ma non sono in grado di determinare se l'indirizzo restituito si riferisce a una funzione o una variabile. C'è un modo per determinare le informazioni di battitura tramite questa tabella dei simboli?
dipendente dalla piattaforma, ma si può ottenere via con 1. esaminando l'indirizzo (spazio), oppure 2. con la ricerca di una qualche funzione speciale a partire codice (trampolini, ecc) –
o 3. Estrarre informazioni fuori delle informazioni di debug del DWARF, se disponibili (che non è banale) – nos
Le informazioni di debug non sono disponibili per questa applicazione; l'applicazione è talmente grande che il tentativo di compilare con le informazioni di debug arresta qualsiasi cosa tenti di leggerlo (gdb) – dykeag