如何在反汇编的 ELF 可执行文件中查找(区分)库代码?
Posted
技术标签:
【中文标题】如何在反汇编的 ELF 可执行文件中查找(区分)库代码?【英文标题】:How to find (distinguish) library code in disassembled ELF executable? 【发布时间】:2020-07-09 08:25:57 【问题描述】:在反汇编的 ELF 文件中,我需要将我编写的代码与编译器插入的代码与外部库(如 capstone 或任何你想要的)区分开来。当我到达一个名为 .为了浏览 ELF 部分,我使用了 ghidra。
【问题讨论】:
动态库中的代码不在您的 ELF 文件中。 您是在谈论来自inline
头文件中定义的函数的代码吗? (在 C++ 中更常见,但在 C 中可能。)编译器可以选择发出一个独立的定义和call
它,而不是在每个调用点实际内联这些函数。但通常在头文件中定义的任何库函数都足够小,编译器会内联它们。
我需要找到一种方法来查看除了我写的代码之外还插入了哪些代码,这就是我所说的。对不起,如果我写了一些让你感到困惑的东西
【参考方案1】:
如果二进制文件没有被剥离,那么您应该能够仅通过函数名称来区分函数。例如,如果一个函数被称为main
,那么它就是您编写的代码,如果它被称为malloc
,那么它在libc 中。此外,如果二进制文件是动态链接的,那么外部调用应该在 GHIDRA 中显示。但是,如果二进制文件是静态链接并且被剥离的,那么你只需要猜测。
【讨论】:
是的,这是真的。在 Ghidra 中我可以识别它们。它创建了另一个称为外部的部分。我需要在 ghidra 之外找到一个模式,这样我就可以在任何精灵中识别这些调用,而无需调试信息。在 ghidra 中,我只能找到指向 .plt ->.got ->ldd filename
查看外部库。
是的,但据我了解,编译器在我的 ELF 中插入了一些代码。这就是我要确定的,而不是反汇编外部库
如果你只是想反汇编你的代码,那么不要看外部调用。
我想看看除了我的代码之外在我的ELF中插入了哪些代码如果有以上是关于如何在反汇编的 ELF 可执行文件中查找(区分)库代码?的主要内容,如果未能解决你的问题,请参考以下文章
Android 逆向使用 Python 解析 ELF 文件 ( Capstone 反汇编 ELF 文件中的机器码数据 | 完整代码示例 ) ★★★