将 gdb 附加到隐藏的库/进程

逆向工程 调试器 数据库
2021-06-13 11:29:02

在 OSX 上,我试图调试/附加到应用程序在运行时取消归档的框架。框架通常作为 .gz 文件驻留在应用程序包内的 /Resources 文件夹中。

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

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

1个回答

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

首先,了解一下该库可能正在使用哪些系统调用(syscallint 80h在 Linux 中),如果有的话。对于这部分,您可以使用您最喜欢的反汇编程序或代码跟踪程序。如果库本身没有任何系统调用,找出或推断其子函数可能使用的系统调用。如果您不知道或者这一步由于库的大小和/或复杂性而变得太困难,您可以跳过第一部分。

然后,从gdb程序开始如果现在您已经知道要捕获哪些系统调用,那么只捕获那些。否则将它们全部捕获。命令是catch syscall. 然后r运行程序。

此时我通常会做disp/10i $pc一点点代码看看。

进入系统调用后,执行backtrace打印堆栈帧。在所有这些或仅在您感兴趣的那些中设置断点。使用说明是break,例如break *0xdeadbeef然后continue

如果您到达所需的库或函数,那太好了。如果没有,则delete是您到达的断点,然后continue重复,直到到达您感兴趣的函数。

希望这可以帮助。