是否可以使用钩子跳转到另一个进程的运行内存,然后跳转回来,而不需要像 DLL 注入那样的东西?
例如,如果 processA
有一个过程foo
并且 processB
有一个bar
具有相同原型的过程foo
(用于挂钩),是否可以挂钩foo
到 jmp to bar
,假设两个进程都在运行?
编辑:这需要在 Windows 上完成。
根据定义,进程是沙箱。如果您甚至错误地超出了地址空间,它也会被引发并作为 SIG_USR 信号捕获并报告为分段错误
话虽如此,您可以使用共享内存-shmem、管道和套接字等进程间通信机制来跨进程进行通信。
编辑:还有可用的 RPC(远程过程调用)机制,例如提供远程方法调用的 CORBA。
Windows(以及 Unix 和可能绝大多数其他现代操作系统)中的每个进程都有自己的虚拟内存空间,通常映射到不同的物理地址。因此,将 DLL 注入另一个进程的地址空间是挂钩该进程中任何内容的唯一方法。另一方面,一旦您在该进程中有一个 DLL,您可以在那里做很多事情,例如。生成自己的线程并使用 Windows 消息与父进程通信(作为 Windows 中最简单的通信方法之一)。