是否有可能使用掛鉤跳轉到另一個進程的運行內存,然後跳回來,沒有任何類似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