在二进制中查找类符号的来源

时间:2013-10-16 19:39:42

标签: iphone ios objective-c

我有一个有趣的问题。我在我的应用程序中(特别是在文件NRURLProtocol.m中)引用了一个名为NRURLProtocol的类的崩溃日志,根据崩溃日志存在于我的应用程序中,而不是在iOS框架中。但是,我的项目中没有NRURLProtocol类,也没有任何NRURLProtocol.m文件。通过Google或StackOverflow在线搜索,实际上只有0个引用此类。

如果我在二进制文件上运行以下命令:

otool -o binary | grep NR

我找到了带NR前缀的各种类,包括NRURLProtocol。但是,当我在我的二进制文件链接的所有静态库上使用相同的otool命令时,我什么也没找到。我在驱动器上找不到名为NRURLProtocol.m的文件。

我对如何追踪这一点感到有点失落。这个类不仅存在于我的二进制文件中,而且还被某些东西作为URL协议加载。因此,即使otool找不到任何内容,我使用的某些第三方库也会包含它。

这里是我的二进制文件中带有NR前缀的类的完整列表:

NRASIRequestTracker
NRASISupport
NRErrorData
NRLogger
NRNonARCMethods
NRSecureUDID
NRStats
NRStatsEngine
NRSupportability
NRTransactionData
NRURLProtocol
NRNSURLSupport

以下是我链接到的所有第三方静态库:

Facebook SDK
HockeyApp SDK
ZipKit
Mixberry SDK (though not actually using it anywhere, currently disabled)
Flurry SDK
Google AdMob SDK
HelpShift SDK
UrbanAirship SDK
libBass (audio library, doesn't contain Objective-C code)
EX2Kit (my own toolkit library, which doesn't contain this code)

有没有人知道这些类的来源,或者我可以尝试的其他命令?

1 个答案:

答案 0 :(得分:0)

发现它!不知怎的,我错过了我们使用NewRelic SDK的事实。鉴于NR前缀,这应该是显而易见的。 otool很快就表明有违规的课程在那里。