如何使用ida pro找出所有调用外部函数的位置?

逆向工程 艾达 拿到 血小板
2021-07-05 22:03:36

我只想找出所有pthread_attr_getstack使用ida pro调用标准库函数的位置.plt 中有一个条目:

.plt:00015894 ; =============== S U B R O U T I N E =======================================
.plt:00015894
.plt:00015894 ; Attributes: thunk
.plt:00015894
.plt:00015894 ; int pthread_attr_getstack(const pthread_attr_t *attr, void **stackaddr, size_t *stacksize)
.plt:00015894 pthread_attr_getstack
.plt:00015894                 ADRL            R12, 0x3AD89C
.plt:0001589C                 LDR             PC, [R12,#(pthread_attr_getstack_ptr - 0x3AD89C)]! ; __imp_pthread_attr_getstack
.plt:0001589C ; End of function pthread_attr_getstack

如果我双击__imp_pthread_attr_getstack,它将转到:

extern:003D8520 ; int pthread_attr_getstack(const pthread_attr_t *attr, void **stackaddr, size_t *stacksize)
extern:003D8520                 IMPORT __imp_pthread_attr_getstack
extern:003D8520                                         ; CODE XREF: pthread_attr_getstack+8↑j
extern:003D8520                                         ; DATA XREF: .got:pthread_attr_getstack_ptr↑o

如果我双击pthread_attr_getstack+8↑j,它将转到上面的 .plt 条目,如果我双击.got:pthread_attr_getstack_ptr↑o,它将转到一个 .got 条目:

.got:003ADD8C pthread_attr_getstack_ptr DCD __imp_pthread_attr_getstack
.got:003ADD8C                                         ; DATA XREF: pthread_attr_getstack+8↑r

如果我双击pthread_attr_getstack+8↑r.got 条目中的 ,它也会转到上面的 .plt 条目。这是否意味着没有代码调用pthread_attr_getstack如果答案是否定的,那么如何找出所有呼叫的位置pthread_attr_getstack顺便说一句,是名为 libmono.so 的精灵,我想反转它。

需要强调的一点是,libmono.so elf 文件非常喜欢加密,也就是说libmono.so 中可能存在大量混淆代码。

1个回答

下载和审查你的共享文件后,我可以肯定地说pthread_attr_getstack功能是从未使用过由二进制

如果您仍然确定使用了该函数,则可能是以下情况:

  1. 该函数是动态加载的。我已经使用该dlsym函数搜索了任何清晰的动态加载,但我可能遗漏了一些东西(或者可能有一些更复杂的东西。
  2. 该函数可以通过另一个二进制文件使用,该二进制文件本身由您的二进制文件使用。

在任何情况下,出于多种原因,导入表中的存在并不一定意味着二进制文件正在使用该函数。