Sto iniettando un dylib in alcune applicazioni per alcuni comportamenti desiderati.Agganciare i metodi C++ su OSX?
Sono in grado di collegare correttamente le API C piatte. Una volta iniettato il dylib, guardo nella tabella dei simboli e aggiorno la sua voce con il mio indirizzo di funzione e, a sua volta, richiama quello originale.
Quindi, i nomi dei simboli diventano importanti per me.
Il mio problema è con nome cacao mangling. Come possiamo agganciare una funzione C++ il cui nome è stato storpiato. Ho letto alcuni punti sullo stack overflow, che è possibile collegare codice C++ con mach_override, ma nessun esempio o riferimento.
Qualcuno può darmi un esempio su come ottenere l'aggancio del C++?
Edit: Ho usato $ c++filt -n _ZN10WindowData12GetCGContextEv
come un esempio e ha ottenuto il fuori messo come WindowData::GetCGContext()
- È WindowData una classe o spazio dei nomi?
- Come posso farlo? Ho bisogno di alcune dichiarazioni anticipate ed estensioni per usare WindowData :: GetCGContext() correttamente per l'aggancio.
qualcosa di simile ...
typedef void* (*WindowData_GetCGContextProcPtr)(void* inObj);
static WindowData_GetCGContextProcPtr gWindowDataGetCGContextProcPtr = NULL;
void* try_WindowDataGetCGContextProcPtr(void* inObj)
{
printf("try_WindowDataGetCGContextProcPtr \n");
return gWindowDataGetCGContextProcPtr(inObj);
}
Ora, voglio correggere questo metodo.
gWindowDataGetCGContextProcPtr = (WindowData_GetCGContextProcPtr)Patch((const void*)&WindowData::GetCGContext, (const void*)&try_WindowDataGetCGContextProcPtr);
Questa patch fornisce errori di compilazione.
error: 'WindowData' has not been declared
error: 'GetCGContext' was not declared in this scope
Come ho risolto?
Grazie, sono stato in grado di decodificare il nome del metodo. – MacGeek