在OSX上,我尝试调试/附加到应用程序在运行时取消归档的框架。框架通常以.gz文件的形式位于应用程序捆绑包的/ Resources文件夹中。

我遇到的问题是框架似乎没有显示在我所看到的流程中的任何地方。除此之外,我不知道在将其加载到内存中以设置断点时如何附加它,以便可以开始调试。

关于特制框架的任何提示或建议,将不胜感激。

评论

您应该更具体一些。有多种方法可以附着到分叉的孩子上。您写问题的方式有点不确定。例如。如何针对我们不知道的事物提供建议?

#1 楼

我没有OSX的经验,但是至少在Linux中,您可以这样做:

首先,了解一下库可能使用的系统调用(Linux中的syscallint 80h),如果任何。您可以在此部分中使用自己喜欢的反汇编程序或代码跟踪程序。如果库本身没有任何系统调用,请找出或推断其子功能可能正在使用的系统调用。如果您不了解该步骤,或者由于库的大小和/或复杂性而导致此步骤变得太困难,则可以跳过此第一部分。如果现在您已经知道要捕获哪个系统调用,则仅捕获那些。否则,抓住他们。命令是gdb。然后catch syscall运行程序。

此时,我通常会执行r来查看一些代码。 disp/10i $pc打印堆栈帧。在所有断点中或仅在您感兴趣的断点中设置断点。使用的指令是backtrace,例如break。然后break *0xdeadbeef

如果到达所需的库或函数,那就太好了。如果不是,请continue到达的断点,然后delete,并重复直到到达您感兴趣的功能。

希望有帮助。

评论


要了解有关系统调用的信息,可以使用ktrace,dtrace和struss,具体取决于OSX版本。

– 0xC0000022L♦
13年8月31日在12:12