我有一台 powerpc 计算机,它的代码采用 ELF 文件。我制作了一个工具,可以让我成功地提取和注入段,但是我遗漏了一小段关于我想要进行的修改的信息。原代码如何调用,需要全局化的变量如何存储?
我可以更改导出函数指向的位置,这就是启用所需更改所需的全部内容。我不完全确定我应该如何为 ASM 中的函数实现存根以调用一些 C 代码而不弄乱堆栈或寄存器,除非我明确希望发生这种情况。我的想法是制作一些小函数,这些函数分支到第二个存根,该存根将处理所有状态管理,为 C 代码做准备。我想我可以使用这个“双阶段存根”来获得 originalText+function*4 的第一部分并为此做一些简单的数学运算,并且只需要在添加/删除挂钩函数时更改导出的函数.
编辑:我想我应该对此进行一些澄清。我主要想让程序连接到远程设备并记录一些东西。所以我需要使用方法调用来维护活动的套接字连接。我还使用了一个专有操作系统,它具有稍微修改的 ELF 格式,但唯一额外的是 zLib 压缩。
编辑 2:好的,我更好地理解调用。我把这个搞得太复杂了,只需要一个分支。我还找到了一个地址来为我的数据粘贴一个 malloc 的指针。现在我需要弄清楚的是如何在使用 PIE 调用地址时让 GCC 进行 relitave 跳转。因为我在最后添加我的代码,所以我知道我在 X 之外,但我不知道真正的地址,因为我的可执行文件可以在内存中移动。