我想在 Mac OS X 上挂接一个 C 函数。它是 AudioUnitInitialize
,这样我就可以创建回调并将音频保存到文件中。我通过 this page 的教程获得了 Mobile Substrate 框架。这是我使用 MSHookFunction
Hook 该函数的代码。
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 是 AudioComponentInstance 的类型定义
关于objective-c - Hook C 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15923884/