2016-12-13 20 views
3

假設我有一個正在我的電腦上運行的進程(target.exe)。 我發現,那個target.exe正在使用一個DLL(target.dll)。在這個DLL中有一個名爲方法:修改一個沒有進程重啓的進程調用的dll的方法

public PaintedObject GetRepaintedObject(Image img) 
{ 
    return new PaintedObject(img); 
} 

是否有可能趕上方法調用GetRepaintedObject在運行時和執行自己的代碼?我只想返回我自己的PaintedObject。

編輯:我覺得target.exe負荷target.dll到他的記憶空間,而這正是我要注入或修改方法GetRepaintedObject點。我不想重新編譯dll或其他東西。每次運行target.exe正在調用GetRepaintedObject我想攔截並返回自己的值。

+0

找到Mono.Cecil庫。有很多教程。 –

+0

我已經做到了。但是我沒有找到任何關於我的問題的例子或信息。 – Ngine

+0

對於重複,你只需要用你想運行的代碼代替步驟'5b'。如果代碼超過一行或兩行,我會建議製作一個'inject.dll',並讓'GetRepaintedObject'從'inject.dll'調用一個靜態函數並返回該靜態方法的調用。如果您在Mono.Cecil中調用另一個dll的靜態方法時遇到問題,請特別提出一個新的quesiton。 –

回答

-1

您是否需要在運行時從DLL中調用GetRepaintedObject()

如果是,您可以使用反射來獲取DLL中定義的類的方法的引用。

+0

不需要調用該方法。該方法有時被target.exe調用,我只想攔截這個調用並運行我自己的代碼。 因此,每次** GetRepaintedObject **都由** target.exe **調用。我想執行/注入我自己的代碼並返回一個自定義** PaintedObject *到** target.exe **: – Ngine

相關問題