【问题标题】:How to find (distinguish) library code in disassembled ELF executable?如何在反汇编的 ELF 可执行文件中查找(区分)库代码?
【发布时间】:2020-07-09 08:25:57
【问题描述】:

在反汇编的 ELF 文件中,我需要将我编写的代码与编译器插入的代码与外部库(如 capstone 或任何你想要的)区分开来。当我到达一个名为 .为了浏览 ELF 部分,我使用了 ghidra。

【问题讨论】:

  • 动态库中的代码不在您的 ELF 文件中。
  • 您是在谈论来自inline 头文件中定义的函数的代码吗? (在 C++ 中更常见,但在 C 中可能。)编译器可以选择发出一个独立的定义和call 它,而不是在每个调用点实际内联这些函数。但通常在头文件中定义的任何库函数都足够小,编译器会内联它们。
  • 我需要找到一种方法来查看除了我写的代码之外还插入了哪些代码,这就是我所说的。对不起,如果我写了一些让你感到困惑的东西

标签: c assembly reverse-engineering elf disassembly


【解决方案1】:

如果二进制文件没有被剥离,那么您应该能够仅通过函数名称来区分函数。例如,如果一个函数被称为main,那么它就是您编写的代码,如果它被称为malloc,那么它在libc 中。此外,如果二进制文件是动态链接的,那么外部调用应该在 GHIDRA 中显示。但是,如果二进制文件是静态链接并且被剥离的,那么你只需要猜测。

【讨论】:

  • 是的,这是真的。在 Ghidra 中我可以识别它们。它创建了另一个称为外部的部分。我需要在 ghidra 之外找到一个模式,这样我就可以在任何精灵中识别这些调用,而无需调试信息。在 ghidra 中,我只能找到指向 .plt ->.got -> 的指针。我看不到被调用函数的代码,这就是我需要做的事情
  • 可以反汇编外部库。你可以通过运行ldd filename查看外部库。
  • 是的,但据我了解,编译器在我的 ELF 中插入了一些代码。这就是我要确定的,而不是反汇编外部库
  • 如果你只是想反汇编你的代码,那么不要看外部调用。
  • 我想看看除了我的代码之外在我的ELF中插入了哪些代码如果有
猜你喜欢
  • 2010-12-11
  • 2020-08-05
  • 1970-01-01
  • 2020-07-09
  • 2012-12-26
  • 2012-09-02
  • 1970-01-01
  • 1970-01-01
  • 2018-12-12
相关资源
最近更新 更多