C 執行時替換方法(需要unsafe編譯)

2021-09-28 10:34:10 字數 1772 閱讀 2773

第一種方法的基本原理是將函式指標替換成想要的方法(還有一種方式是用 methodinfo.getmethodbody().getilasbytearray() 獲得il位元組碼,然後(利用c++?)編寫注入**對其位元組碼重新寫入(

這兩種方法都需要先呼叫 runtimehelpers.preparemethod (來準備方法。

第一種方法實現簡便,下面是演示**:

1 /* 

2 for .net 4 and above

3 4 "c:\program files (x86)\msbuild\14.0\bin\csc.exe" /unsafe+ /out:replacemethod.exe replacemethod.cs && start "replacemethod.exe" replacemethod.exe

5 foo1 is called.

6 foo2 is called.

7 foo2 returns.

8 foo3 is called. i『m foo3『s argument.

9 foo4 is called.

10 --------------------

11 version x64 relaese

12 version x64 relaese

13 version x64 relaese

14 version x64 relaese

15 --------------------

16 bar1 is called.

17 bar2 is called.

18 bar2 returns.

19 bar3 is called. i『m foo3『s argument.

20 bar4 is called.

21 22 press any key to exit...

23 */

24 25 using system;

26 using system.reflection;

27 using system.runtime.compilerservices;

28 29 class program

49 }

50 51

52 public class injection

76 else

77

92 }

93 }

94 95 private void bar1()

98 private string bar2()

102 private void bar3(string arg)

105 private void bar4()

108 }

109

110

111 public class target

118

119 private void foo1()

122 public string foo2()

126 private void foo3(string arg)

129 private void foo4()

132 }

第二種方法請查閱連線。

c# 執行時替換方法(需要unsafe編譯)

標籤:console

debug

help

pre...

ampadk

sharp

type

C 控制方法執行時間

1.最近在專案中有個讀取檔案的方法,如果檔案過大,這個方法會長時間卡住,影響程式的執行。於是研究了一下控制方法的執行時間,如果超過某個時間,則跳出該方法的執行。demo 1 private static void main string args 2,函式執行時間 s ret,datetime.no...

C執行時庫

1.概論 執行時庫是 程式在執行時所需要的庫檔案,通常執行時庫是以 lib或 dll形式提供的。c執行時庫誕生於 20世紀 70年代,當時的程式世界還很單純,應用程式都是單執行緒的,多工或多執行緒機制在此時還屬於新觀念。所以這個 j時期的 c執行時庫都是單執行緒的。隨著 作業系統 多執行緒技術的發展...

C執行時庫

visual studio文件的新主頁是docs.microsoft.com上的visual studio 2017文件。可以在crt library features中找到該主題的最新版本。本主題討論構成c執行時庫的各種.lib檔案及其關聯的編譯器選項和預處理程式指令。c執行時庫 crt c執行時...