2012-05-19 41 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中最簡單的通信方法之一)。