我想截取fs/binfmt_elf.c文件中的load_elf_binary函数,从通过参数传递给它的文件中读取一些自定义的节标题,并在从该函数返回之前设置一些寄存器(eax、ebx、ecx、edx)。
现在我读到Jprobes是访问目标函数参数的好方法,但问题是一旦控制从Jprobes函数返回,寄存器和堆栈的值就会按照它的规范恢复,所以我正在寻找一种绕过它的方法,在函数的中间(最好是接近末尾)插入一个探测器可能是一个好主意。
发布于 2015-06-19 14:53:29
那么,让我看看我是否理解了你在做什么。
您已经修改了CPU (在仿真器中运行?)所以指令0xF1做了一些加密的事情。您希望安排load_elf_binary在返回时调用此指令,并正确设置寄存器以使此指令发挥其魔力。不知何故,涉及到了自定义部分。
按照你所说的方式,这将是非常困难的。有几个主要问题:
总而言之,这不会像你所说的那样工作得很好。
更好的方法可能是定义您自己的binfmt (或者替换elf_format中的load_binary回调)。然后,您的binfmt可以以所需的任何方式加载二进制文件。如果你想利用现有的ELF加载器,你可以委托给load_elf_binary,并在返回时做任何你需要做的事情来操纵加载的进程,而不需要任何这些JProbe的东西。
在这两种情况下,请确保将所有要加密/解密的页面重新映射为MAP_PRIVATE,并在更改其内容之前将其标记为脏页面。
https://stackoverflow.com/questions/30929692
复制相似问题