【发布时间】:2015-08-27 03:00:02
【问题描述】:
我的主要问题是,如何对已经存在但在新版本的 iOS 中修改的私有 API 函数进行反向工程?
我创建了一个 iOS 应用程序来使用 IOSurface 和 IOMobileFramebuffer 记录屏幕内容。帧缓冲区用来打开它的主要函数是IOMobileFramebufferGetMainDisplay(connect) 和IOMobileFramebufferGetLayerDefaultSurface。
这些功能从应用程序的第一个版本开始就已经使用,它们适用于 iOS 7 和 8 的所有版本。但是,在最新的 iOS 9 测试版(即 beta 5)上,IOMobileFramebufferGetLayerDefaultSurface 函数可以不行。该函数不会像成功打开帧缓冲区时那样返回 0。
StackOverflow 上的其他用户似乎也遇到了同样的问题:IOMobileFramebufferGetLayerDefaultSurface function failed on iOS 9。我们有一个名为“_framebufferConnection”的 IOMobileFramebufferConnection 和一个名为“_screenSurface”的 IOSurfaceRef 这是当前代码:
IOMobileFramebufferGetMainDisplay(&_framebufferConnection);
IOMobileFramebufferGetLayerDefaultSurface(_framebufferConnection, 0, &_screenSurface;
如前所述,这些功能在 iOS 7-8 上完美运行,但在 iOS 9 上,第二个函数崩溃了。我还查看了带有两个版本符号的二进制文件并进行了比较。与 iOS 8.4.1 二进制文件相比,LDR 的第二个参数在 iOS 9 中略有不同。那么,回到主要问题,我如何对IOMobileFramebufferGetLayerDefaultSurface 进行逆向工程,或者查看它在 iOS 9 上的实际修改方式?
【问题讨论】:
-
你用的是什么ios9版本?
-
iOS 9 beta 5。但同样的情况发生在所有 iOS 9 beta/版本上。
标签: ios objective-c iphone