Objective c 钩住C函数
我想在Mac OS X上挂接一个C函数。它是Objective c 钩住C函数,objective-c,macos,audio,hook,core-audio,Objective C,Macos,Audio,Hook,Core Audio,我想在Mac OS X上挂接一个C函数。它是AudioUnitInitialize,因此我可以创建回调并将音频保存到文件中。我得到了移动基板框架与教程从。这是我用MSHookFunction挂接该函数的代码 static OSStatus (*AudioUnitInitialize_original)(AudioUnit aInUnit); OSStatus AudioUnitInitialize_hooked(AudioUnit aInUnit) { NSLog(@"AudioUnit
AudioUnitInitialize
,因此我可以创建回调并将音频保存到文件中。我得到了移动基板框架与教程从。这是我用MSHookFunction
挂接该函数的代码
static OSStatus (*AudioUnitInitialize_original)(AudioUnit aInUnit);
OSStatus AudioUnitInitialize_hooked(AudioUnit aInUnit)
{
NSLog(@"AudioUnitInitialize_hooked -> START");
OSStatus __return = AudioUnitInitialize_original(aInUnit);
NSLog(@"%p", aInUnit);
NSLog(@"%@", aInUnit); // Here the target application crashes.
NSLog(@"AudioUnitInitialize_hooked -> END");
return __return;
}
...
MSHookFunction(AudioUnitInitialize, AudioUnitInitialize_hooked, &AudioUnitInitialize_original);
这里有什么问题?我可以记录音频单元的地址,但不能记录更多?是否有使用函数参数的解决方案?AudioUnit类型不是Objective-C对象,实际上是指向结构指针的typedef。您不能对其使用
NSLog()
中的%@
格式说明符
AudioUnit是一种类型定义,您可以参考 除了第一段中相当可疑的自我认同声明外,下一页内容如下: “从概念上讲,MSHookFunction()将编写跳转到替换函数的指令,并在自定义内存位置上分配一些字节,该位置具有原始剪切指令并跳转到挂钩函数的其余部分。由于在iPhoneOS上,默认情况下内存页不能同时可写和可执行,因此必须为MSHookFu应用内核补丁“我的任务是工作。” 我有点惊讶,任何这样做的尝试都不会导致内存保护失败
正统的C和C++函数的交互是在库中提供自己的实现,并确保链接器在CoeEdioFrWorkWork版本之前到达它。