0

是否可以使用钩子跳转到另一个进程的运行内存,然后跳转回来,而不需要像 DLL 注入那样的东西?

例如,如果 processA有一个过程foo并且 processB有一个bar具有相同原型的过程foo(用于挂钩),是否可以挂钩foo到 jmp to bar,假设两个进程都在运行?

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

4

2 回答 2

2

根据定义,进程是沙箱。如果您甚至错误地超出了地址空间,它也会被引发并作为 SIG_USR 信号捕获并报告为分段错误

话虽如此,您可以使用共享内存-shmem、管道和套接字等进程间通信机制来跨进程进行通信。

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

于 2012-05-19T10:09:19.960 回答
1

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

于 2012-05-19T11:08:57.213 回答