gpt4 book ai didi

c++ - 在 OSX 上 Hook C++ 方法?

转载 作者:可可西里 更新时间:2023-11-01 18:38:02 28 4
gpt4 key购买 nike

我在某些应用程序中注入(inject)动态库以获得某些所需的行为。

我能够正确地挂接平面 C API。注入(inject) dylib 后,我会查看符号表并使用我的函数地址更新其条目,然后调用原始函数地址。

因此,符号名称对我来说变得很重要。

我的问题是 C++ name mangling。我们如何 Hook 一个名称被破坏的 C++ 函数。我读了一些关于堆栈溢出的地方,可以用 mach_override Hook c++ 代码,但没有示例或引用。

能否举例说明如何实现C++的hooking?

编辑:我以 $ c++filt -n _ZN10WindowData12GetCGContextEv 为例,输出为 WindowData::GetCGContext()

  1. WindowData 是类还是命名空间?
  2. 我怎样才能钩住它?我可能需要一些前向声明和外部声明才能正确使用 WindowData::GetCGContext() 进行 Hook 。

像这样的……

typedef void* (*WindowData_GetCGContextProcPtr)(void* inObj);
static WindowData_GetCGContextProcPtr gWindowDataGetCGContextProcPtr = NULL;
void* try_WindowDataGetCGContextProcPtr(void* inObj)
{
printf("try_WindowDataGetCGContextProcPtr \n");

return gWindowDataGetCGContextProcPtr(inObj);
}

现在,我想修补这个方法。

gWindowDataGetCGContextProcPtr  = (WindowData_GetCGContextProcPtr)Patch((const void*)&WindowData::GetCGContext, (const void*)&try_WindowDataGetCGContextProcPtr);

这个补丁给出了编译错误。

error: 'WindowData' has not been declared
error: 'GetCGContext' was not declared in this scope

我该如何解决?

最佳答案

您可以使用 c++filt解码处理并进行注入(inject)。

但是优化器内联的方法不适用于这种方法

关于c++ - 在 OSX 上 Hook C++ 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8386741/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com