Bazı uygulamalarda istenen bazı davranışlar için bir dylib enjekte ediyorum.OSX'te Hoover C++ Yöntemleri?
Düz C API'lerini düzgün şekilde takabiliyorum. Dylib enjekte ettikten sonra, sembol tablosuna bakıyorum ve girişimi fonksiyon adresimle güncelledim ve daha sonra orijinali çağırıyorum. Bu nedenle sembol isimleri benim için önemli hale geliyor.
Sorunum C++ ad mangling ile ilgilidir. Adına mandallanan bir C++ işlevini nasıl çağırabiliriz. Yığın taşmasıyla ilgili bazı yerleri okuyorum, C++ kodunu mach_override ile kancalamak mümkün, ancak örnek veya referans yok.
Bazıları, C++ 'nun nasıl takılacağı konusunda bana örnek verebilir mi?
Düzenleme: Bir örnek olarak $ c++filt -n _ZN10WindowData12GetCGContextEv
kullanılan ve dışarı WindowData::GetCGContext()
- bir sınıf veya ad alanı WindowData mı olarak koymak lazım?
- Nasıl takabilirim? WindowData :: GetCGContext() 'i çengel için uygun şekilde kullanmak için bazı ileri bildirimlere ve örneklere ihtiyacım var.
Böyle bir şey ...
typedef void* (*WindowData_GetCGContextProcPtr)(void* inObj);
static WindowData_GetCGContextProcPtr gWindowDataGetCGContextProcPtr = NULL;
void* try_WindowDataGetCGContextProcPtr(void* inObj)
{
printf("try_WindowDataGetCGContextProcPtr \n");
return gWindowDataGetCGContextProcPtr(inObj);
}
Şimdi, bu yöntemi yama istiyorum.
gWindowDataGetCGContextProcPtr = (WindowData_GetCGContextProcPtr)Patch((const void*)&WindowData::GetCGContext, (const void*)&try_WindowDataGetCGContextProcPtr);
Bu düzeltme eki, düzeltme hatası verir.
error: 'WindowData' has not been declared
error: 'GetCGContext' was not declared in this scope
Nasıl düzeltebilirim?
Teşekkürler, yöntem isminin çözümünü yapabiliyordum. – MacGeek