2012-05-19 17 views
0

是否有可能使用挂钩跳转到另一个进程的运行内存,然后跳回来,没有任何类似DLL注入的东西?进程间挂接

例如,如果过程A有一个过程foo和过程B有一个过程bar具有相同原型foo(用于钩),是有可能勾foo到JMP到bar,假设两个进程正在运行?

编辑:这需要在Windows上完成。

+1

您可能对[这个问题和我的回答]感兴趣(http://stackoverflow.com/q/10487165/968261)。 –

+0

顺便说一句,我们正在谈论Windows,对吧? –

+0

@Alex - 是的,Windows。我会在那里添加。我正在访问链接。 – Qix

回答

2

定义的过程是一个沙箱。如果你甚至错误地跳出你的地址空间,它就会被提升并作为SIG_USR信号被捕获并报告为分段错误

说到存在进程间通信机制,例如共享内存-shmem,管道和套接字用于跨进程进行通信。

编辑: 还有RPC(远程过程调用)机制可用以及如提供远程方法调用的CORBA。

+0

可以执行共享内存吗? – Qix

+0

@ Di-0xide:如果您将其标记为可执行文件。 – Dani

+0

@Dani:我不确定你如何将共享内存标记为可执行文件。通常你的可执行文件的'.txt'被加载到内存中,只能执行。可以做的是,我们可以从操作系统中获得一些剪切的内存,然后在那里写一些指令,并从代码跳转到该地址以执行它。但它仍然只对您的进程和任何正在访问此共享内存的进程都可见。 –

1

Windows中的每个进程(以及Unix和其他大多数其他现代操作系统)都有自己的虚拟内存空间,通常映射到不同的物理地址。因此,将DLL注入另一个进程的地址空间是唯一钩住该进程中的任何东西的方法。另一方面,一旦你在这个过程中有一个DLL,那么你可以在那里做很多事情,例如。产生自己的线程并使用Windows消息与父进程进行通信(作为Windows中最简单的通信方法之一)。