【问题标题】:Adding a function to a Linux binary向 Linux 二进制文件添加函数
【发布时间】:2011-11-20 11:08:14
【问题描述】:

作为我的安全课作业的一部分,我应该“添加一个简单的函数,将“Hello, World!”打印到已编译的 C Linux 二进制文件中”。提供的二进制文件只是一个编译后的 main 函数,其中包含 10 个 NOPs。

通常,我会直接将所需的代码写入NOP 部分,但我们被明确告知要向程序中添加一个新函数。

我不知道该怎么做。我尝试将一些代码放在二进制文件的末尾,但这似乎破坏了它。有人可以帮我解决这个问题吗?

编辑:This question 听起来有些相似。

编辑 2:搜索“ELF injection”会产生许多有趣的结果。

【问题讨论】:

  • 看起来他们希望您主要调用您添加的功能。因此,使用 main 和 call 加上你的 hello 创建一个源,然后查看字节。
  • @JoopEggen:有那么容易吗?通过查看字节,我发现二进制文件中存储的不仅仅是函数。

标签: binary patch


【解决方案1】:

也许您需要了解更多关于 ELF 的信息(尤其是如果您想让一个程序能够“感染”任何 Linux 二进制文件,而不仅仅是您拥有的那个简单的二进制文件)。

Linux ABI X86-64 supplementLinux Assembly Howto 也很有用

【讨论】:

  • 你能推荐任何好的教程(甚至可能与我的问题直接相关)吗?
  • 我不明白您是否只想为您拥有的特定二进制文件解决一次问题(那么,一个简单的十六进制编辑器就足够了;但您需要了解 ELF 可执行文件,并且objdump 应该有很大帮助)或者如果您声称制造了一种能够修改任何 Linux ELF 可执行文件的病毒。
  • 现在我只是试图解决特定二进制文件的问题,尽管分配的目标当然是真正了解正在发生的事情。
【解决方案2】:

你可以结束主函数,然后在 NOP 中启动一个新函数——但在结束主函数之前,调用你在主函数结束后添加的新函数。

【讨论】:

  • 这限制了新函数的大小,不是吗。我认为添加新函数与仅覆盖 NOPs 的想法是,新函数可能大于可用的 NOPs...
猜你喜欢
  • 2014-12-23
  • 1970-01-01
  • 2013-05-05
  • 2012-01-22
  • 2011-12-01
  • 2017-10-11
  • 1970-01-01
  • 1970-01-01
  • 2014-09-26
相关资源
最近更新 更多