我的主要问题是,如何对已经存在的私有API函数进行反向工程,但是在新版本的iOS中进行了修改?
我创建了一个iOS应用程序来使用IOSurface和IOMobileFramebuffer记录屏幕内容.framebuffer用来打开它的主要功能是IOMobileFramebufferGetMainDisplay(connect)和IOMobileFramebufferGetLayerDefaultSurface.
从应用程序的第一个版本开始就使用了这些功能,并且它们已经在iOS 7和8的所有版本上运行.但是,在最新的iOS 9测试版(测试版5)中,该功能IOMobileFramebufferGetLayerDefaultSurface不起作用.该函数不会返回0,因为它在成功打开帧缓冲区时应该返回0.
StackOverflow上的其他用户似乎也遇到了同样的问题:iOS 9上的IOMobileFramebufferGetLayerDefaultSurface函数失败.我们引用名为"_framebufferConnection"的IOMobileFramebufferConnection和名为"_screenSurface"的IOSurfaceRef这是当前代码:
IOMobileFramebufferGetMainDisplay(&_framebufferConnection);
IOMobileFramebufferGetLayerDefaultSurface(_framebufferConnection, 0, &_screenSurface;
如前所述,这些在iOS 7-8上完美运行,但在iOS 9上,第二个功能崩溃了.我还查看了两个版本符号的二进制文件并进行了比较.与iOS 8.4.1二进制文件相比,iOS 9中的第二个参数略有不同.那么,回到主要问题,我如何进行逆向工程IOMobileFramebufferGetLayerDefaultSurface,或者看看它在iOS 9上以何种方式实际修改?
我正在阅读一些关于swift函数式编程的书籍.当我看到一些书说swift中的函数是"一流的函数"时我迷惑了"一流"的含义.任何人都可以回答我或给我一些示例代码吗?