我想拦截load_elf_binary
文件中的fs/binfmt_elf.c
函数,从通过参数传递给它的文件中读取一些自定义节标题并设置几个寄存器(eax,ebx,ecx,edx) )从函数返回之前。
现在我读到Jprobes是一种访问目标函数参数的好方法,但问题是一旦控件从Jprobes函数返回,寄存器和堆栈值就按照它的规范进行恢复,所以我正在研究绕过它并且可能在函数中间插入探针(最好是朝向末端)将是一个好主意。如果我错了,请纠正我,并帮助解决这个问题。
答案 0 :(得分:2)
所以,让我看看我是否理解你正在做的事情。
您是否修改了CPU(在模拟器中运行?),以便指令0xF1
执行某种加密操作。您希望安排load_elf_binary在返回时调用此指令,并为此指令正确设置寄存器以实现其魔力。不知何故涉及自定义部分。
按照你说的方式,这很难做到。有几个主要问题:
总而言之,这不会像你说的那样运作得太好。
更好的方法可能是定义您自己的binfmt(或替换load_binary
中的elf_format
回调)。然后,binfmt可以以任何需要的方式加载二进制文件。如果你想利用现有的ELF加载器,你可以委托给load_elf_binary,并在返回时做你需要的任何操作加载过程,而不需要任何这样的JProbe东西。
在任何一种情况下,请务必将您正在加密/解密的所有页面重新映射为MAP_PRIVATE
,并在更改其内容之前将其标记为脏。