Tôi đang tiêm một dylib vào một số ứng dụng cho một số hành vi mong muốn.Hooking C++ Phương pháp trên OSX?
Tôi có thể móc đúng C API chuẩn. Một khi tôi tiêm dylib, tôi nhìn ra trong bảng biểu tượng và cập nhật mục nhập của nó với địa chỉ hàm của tôi và lần lượt gọi bản gốc.
Vì vậy, tên biểu tượng trở nên quan trọng đối với tôi.
Vấn đề của tôi là với Tên C++ mangling. Làm thế nào chúng ta có thể móc một hàm C++ có tên đã bị xáo trộn. Tôi đọc một số nơi trên tràn ngăn xếp, có thể móc mã C++ với mach_override, nhưng không có ví dụ hoặc tham chiếu.
Một số có thể cho tôi ví dụ về cách đạt được sự kết hợp của C++?
Edit: tôi đã sử dụng $ c++filt -n _ZN10WindowData12GetCGContextEv
như một ví dụ và đã đặt ra như WindowData::GetCGContext()
- là WindowData một lớp hoặc namespace?
- Làm cách nào tôi có thể móc nối? Tôi ma cần một số tờ khai về phía trước và externs để sử dụng WindowData :: GetCGContext() đúng cho hooking.
Something như thế này ...
typedef void* (*WindowData_GetCGContextProcPtr)(void* inObj);
static WindowData_GetCGContextProcPtr gWindowDataGetCGContextProcPtr = NULL;
void* try_WindowDataGetCGContextProcPtr(void* inObj)
{
printf("try_WindowDataGetCGContextProcPtr \n");
return gWindowDataGetCGContextProcPtr(inObj);
}
Bây giờ, tôi muốn vá phương pháp này.
gWindowDataGetCGContextProcPtr = (WindowData_GetCGContextProcPtr)Patch((const void*)&WindowData::GetCGContext, (const void*)&try_WindowDataGetCGContextProcPtr);
Bản vá này cung cấp lỗi biên dịch.
error: 'WindowData' has not been declared
error: 'GetCGContext' was not declared in this scope
Làm cách nào để khắc phục sự cố?
Cảm ơn, tôi đã có thể loại bỏ tên phương thức. – MacGeek