2013-03-29 106 views
0

我正在编写一个小型仪器工具。我必须在二进制文件中插入检测程序。一个好的方法应该是将这些例程插入一个单独的代码段和一个单独的数据段中,您能否解释如何实现这一点?此外,如何修改原始文件中代码段的大小?如何扩展ELF二进制文件

最佳,

+0

你为什么不这样做,在运行时使用插入? Linux上的'LD_PRELOAD',OS X上的'DYLD_INSERT_LIBRARIES'等工作得很好。 – 2013-03-29 12:01:25

回答

1

我必须在二进制文件中插入探测例程。一个好的方法应该是将这些例程插入单独的代码段和单独的数据段中

什么是binary file?有一个这样做为一个relocable(ET_REL)目标文件,与完全链接的可执行文件(ET_EXEC)或共享库(ET_DYN)这样做之间的区别。

你能解释一下如何做到这一点吗?

对于ET_REL,它应该是相当直接的:你读文件头,它指向节头,它告诉你在哪里.data.text部分是。然后编写一个新文件,扩展您想要的部分,复制其他部分,并调整部分标题以反映新的部分偏移和大小。

对于ET_DYNET_EXEC,这个问题很可能太难:你需要搬迁调整表,哈希表,程序头;保持所有结构的一致性和正确对齐。

1

在肖恩柯罗威斯,肖恩·黑帽子演示抽空与ELF可执行进行修改两种策略:

  • 在文件补丁 - 通过延长段

  • 在核心做补丁(即时) - 通过利用由于段对齐而可用的内存空间 来实现它。

它被称为“黑帽美国2002 - 固定/二进制文件上打孔”(YouTube)的

相关问题