簡単なデバッグ防止

9060 ワード

最近、SEH構造を利用してデバッグを逆デバッグする方法について説明した反外挂の資料を見ました.私は自分でコードを書いてテストして、公式サイトでダウンロードしたODロードプログラムは、確かにデバッグを逆にする役割を果たしました.私は喜んでパッケージして、同僚にテストして、結局彼は彼の改良版ODで意外にも邪魔なデバッグができて、私はその時涙を流しました.あまり話さないで、直接コードをつけます.
 1 #include 
 2 
 3 using namespace std;
 4 
 5 //  
 6 template 
 7 class ClassExc 
 8 { 
 9 public: 
10     ClassExc(Obj* o, fun f) : o_(o), f_(f) 
11     { 
12     }
13 
14     void TriggerException() 
15     { 
16         _try 
17         { 
18             int i = 0; 
19             int a = 0/i; 
20         } 
21         _except(1) 
22         {
23 
24             (o_->*f_)(); 
25         } 
26     }
27 
28 private: 
29     fun f_; 
30     Obj *o_; 
31 };
32 
33 //   
34 template 
35 class NormalExc 
36 { 
37 public: 
38     NormalExc(fun f) : f_(f) 
39     { 
40     }
41 
42     void TriggerException() 
43     { 
44         _try 
45         { 
46             int i = 0; 
47             int a = 0/i; 
48         } 
49         _except(1) 
50         {
51 
52             (*f_)(); 
53         } 
54     } 
55 private: 
56     fun f_; 
57 };
58 
59 class My 
60 { 
61 public: 
62     void Test() 
63     { 
64         cout << "MY::Test" << endl; 
65     } 
66 };
67 
68 void NormalExcHandle() 
69 { 
70     cout << "NormalExcHandle" << endl; 
71 }
72 
73 int main() 
74 { 
75     My m; 
76     typedef void (My::*myfun)();
77 
78     myfun f= &My::Test;
79 
80     ClassExc e(&m, f); 
81     e.TriggerException(); //  , f
82 
83     NormalExc<void (*)()> ne(NormalExcHandle); 
84     ne.TriggerException(); //  ,  NormalExcHandle
85 
86     getchar(); 
87     return 0; 
88 }

 
クラステンプレート2つ、ClassExcクラステンプレートでは、例外が発生した場合に、クラスのメンバー関数をコールバックとして使用できます.NormalExcクラステンプレートでは、例外が発生した場合、通常の関数をコールバックとして使用できます.
コードは非常に簡単で、一般的なODロードでテストすることができます.
転載先:https://www.cnblogs.com/cdh49/p/3688489.html