是否有可能使用挂钩跳转到另一个进程的运行内存,然后跳回来,没有任何类似DLL注入的东西?进程间挂接
例如,如果过程A
有一个过程foo
和过程B
有一个过程bar
具有相同原型foo
(用于钩),是有可能勾foo
到JMP到bar
,假设两个进程正在运行?
编辑:这需要在Windows上完成。
是否有可能使用挂钩跳转到另一个进程的运行内存,然后跳回来,没有任何类似DLL注入的东西?进程间挂接
例如,如果过程A
有一个过程foo
和过程B
有一个过程bar
具有相同原型foo
(用于钩),是有可能勾foo
到JMP到bar
,假设两个进程正在运行?
编辑:这需要在Windows上完成。
定义的过程是一个沙箱。如果你甚至错误地跳出你的地址空间,它就会被提升并作为SIG_USR信号被捕获并报告为分段错误
说到存在进程间通信机制,例如共享内存-shmem,管道和套接字用于跨进程进行通信。
编辑: 还有RPC(远程过程调用)机制可用以及如提供远程方法调用的CORBA。
Windows中的每个进程(以及Unix和其他大多数其他现代操作系统)都有自己的虚拟内存空间,通常映射到不同的物理地址。因此,将DLL注入另一个进程的地址空间是唯一钩住该进程中的任何东西的方法。另一方面,一旦你在这个过程中有一个DLL,那么你可以在那里做很多事情,例如。产生自己的线程并使用Windows消息与父进程进行通信(作为Windows中最简单的通信方法之一)。
您可能对[这个问题和我的回答]感兴趣(http://stackoverflow.com/q/10487165/968261)。 –
顺便说一句,我们正在谈论Windows,对吧? –
@Alex - 是的,Windows。我会在那里添加。我正在访问链接。 – Qix