使用全局变量将代码附加到文本段?

逆向工程 小精灵 电源
2021-06-18 07:41:31

我有一台 powerpc 计算机,它的代码采用 ELF 文件。我制作了一个工具,可以让我成功地提取和注入段,但是我遗漏了一小段关于我想要进行的修改的信息。原代码如何调用,需要全局化的变量如何存储?

我可以更改导出函数指向的位置,这就是启用所需更改所需的全部内容。我不完全确定我应该如何为 ASM 中的函数实现存根以调用一些 C 代码而不弄乱堆栈或寄存器,除非我明确希望发生这种情况。我的想法是制作一些小函数,这些函数分支到第二个存根,该存根将处理所有状态管理,为 C 代码做准备。我想我可以使用这个“双阶段存根”来获得 originalText+function*4 的第一部分并为此做一些简单的数学运算,并且只需要在添加/删除挂钩函数时更改导出的函数.

编辑:我想我应该对此进行一些澄清。我主要想让程序连接到远程设备并记录一些东西。所以我需要使用方法调用来维护活动的套接字连接。我还使用了一个专有操作系统,它具有稍微修改的 ELF 格式,但唯一额外的是 zLib 压缩。

编辑 2:好的,我更好地理解调用。我把这个搞得太复杂了,只需要一个分支。我还找到了一个地址来为我的数据粘贴一个 malloc 的指针。现在我需要弄清楚的是如何在使用 PIE 调用地址时让 GCC 进行 relitave 跳转。因为我在最后添加我的代码,所以我知道我在 X 之外,但我不知道真正的地址,因为我的可执行文件可以在内存中移动。

1个回答

好的,经过更多研究,我想出了这个问题的答案。

您只需要一个分支处理程序,因为我可以很好地分支到 C 代码中,因为它们共享相同的调用方法。

在内存被映射到我的代码之前,文本段中的空间用完了,所以我不得不通过不同的方法做一些更具侵入性的事情。

现在,为了让 GCC 与相对函数调用配合得很好,我告诉它我的代码位于 0x00000000+sizeof(.text) 处,因此它将使用相对于精灵的相对分支和对不动的系统内容的绝对分支。