2014-01-10 65 views
2

可以說進程1是主進程,進程2是目標進程(我不能編輯它),我想能夠調用函數來自進程1中的進程2,任何人都有一個很好的方法來做到這一點?我想在注入一個DLL調用該函數的出口,並使用外部GetProcAddress ...這是可能的嗎?這是最好的方式來做它?調用外部函數(從一個exe到另一個)

謝謝你的時間。

+0

是否要在進程1執行的上下文中調用該函數?或者你只是想讓進程2調用恰好在進程1中定義的函數? –

回答

4

你的問題的標題和正文問兩個微妙不同的問題。

讓一個可執行文件調用一個包含在另一個可執行文件中的函數是很容易的,至少如果已導出該函數的名稱。您可以使用LoadLibrary加載可執行文件,就像加載DLL一樣,然後使用GetProcAddress來獲取要調用的函數的地址並正常調用它。但請記住,如果沒有在其自身可執行文件內調用之前發生其他初始化,該函數可能無法正常工作。

在另一個進程(不只是在另一個可執行文件中)調用函數的工作量相當大。基本的想法是有一個函數,使得調用和(例如)將結果寫入與進行調用的進程共享的某些內存。然後使用CreateRemoteThread使該函數在包含您需要調用的函數的進程的上下文中執行。

如果已編寫目標進程來支持它,還有其他方法(如COM)旨在更加乾淨地支持這種類型的功能。如果可以的話,它們通常更可取

+0

我將使用CreateRemoteThread方法。 – user3124543

相關問題