将iOS应用程序加载到Hopper后,如何找到所有子例程调用?

如果我正确理解,则子例程由唯一地址标识。因此,在二进制文件中,对此子例程的所有调用都应指向该地址。因此,应该可以列出对该地址的所有呼叫,我错了吗?寻找似乎很简单,但是我在其他地方找不到任何东西。

评论

您的标题问的是一件事,但身体似乎有所不同...进行一些澄清可能会有所帮助

#1 楼

如果我正确理解您的问题,那么您正在Hopper中搜索“交叉引用”功能。

交叉引用

交叉引用(或简称为XREF)是反汇编程序的功能,可显示您在哪里调用了某些函数和对象,或者某个特定函数使用了哪些函数和对象。我们可以通过将其关联为XREF-To和XREF-From来简化它。引用可以是数据,也可以是代码。

XREF是宝贵的资源,当我们想确切地从何处调用函数或当前函数调用什么函数时。如您所知,这可能非常有用,因此我们不必遍历框架指针的堆栈即可查找调用当前函数的函数,也不必手动搜索指向特定地址的CALL。
料斗

在料斗拆装器中,您可以通过在标记所需地址的同时按X看到XREFs-To地址。可以使用Alt + X显示XREFs-From。另外,您也可以在料斗顶部工具栏中的Navigate下找到“交叉引用”列表。
还可以通过右键单击并选择“ References to ...”或“来自...的引用。 br />
  j_puts:
08048390   jmp   dword [puts@GOT]   ; puts@GOT,puts, CODE XREF=sub_8048662+15, sub_8048662+31, sub_8048662+86, sub_8048662+104


#2 楼

我不确定它在IOS或hopper上如何工作,但是从我的经验来看,函数调用可能会变得模糊。

例如。函数位于VA 1000


将值100加载到register1
将register1乘以5
将500添加到register1
将参数推入堆栈
呼叫register1

我希望这会有所帮助。