【问题标题】:How to Insert Assembly Instructions to ELF file如何将汇编指令插入 ELF 文件
【发布时间】:2018-10-21 05:38:12
【问题描述】:

我想知道如何简单地将汇编指令插入到已编译的 ELF 二进制文件中。我不想对它进行十六进制编辑或类似的东西。

【问题讨论】:

  • 好吧,如果你想修改二进制文件,你必须“hexedit”。
  • 您可能会发现 Agner Fog 的 Object file converter and disassembler 很有用。 ELF fmt,反汇编 -> ASM 输出,修改和组装 -> ELF fmt.
  • @m0skit0:不,你没有;您可以以可编写脚本的非交互方式替换或附加字节,例如 printf $'\xf3\x90'' | dd of=myfile conv=notrunc bs=1 seek=12345 用 x86 pause 指令 (rep nop) (未经测试)替换字节偏移 12345 处的两个字节。或者写一个 C 程序到lseek + write。这显然不如使用十六进制编辑器完成一次性任务方便,但确实允许您编写脚本/程序来为多个系统上的同一个文件执行此操作。
  • 给自己弄一份“Ida”(hex-rays.com/products/ida),学会使用它,你就会终生受益。 :-)
  • 你可以接受什么样的解决方案?

标签: linux debugging assembly elf disassembly


【解决方案1】:

ELF 二进制文件首先是一个文件。文件由字节组成。 修改现有指令就是改变一些字节。最短的方法是通过使用字节的文件编辑器。是“文本”还是“十六进制”编辑器并不重要,只要它能完成工作即可。

如果您想插入一条指令,也就是说,将它放在现有字节之间的新空间中而不覆盖它们,高级文本/十六进制编辑器有时可以为您做到这一点。但是,此后程序不太可能继续有效,因为其他指令通常通过数字偏移量相互引用,并且在您移动部分代码后,此类偏移量将关闭。

最后,即使改变一个字节也可能使二进制无效,在某种意义上,如果它嵌入了校验和或数字签名,它将不再是正确的。

【讨论】:

  • 然而,修复二进制文件是一项相当普遍的活动——当然,像“Ida”这样的工具比随机的十六进制编辑器更好(即使一个普通的旧十六进制编辑器也可能证明在急需的时候:-)。
猜你喜欢
  • 2016-10-28
  • 2020-07-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多