簡単なデバッグ防止
9060 ワード
最近、SEH構造を利用してデバッグを逆デバッグする方法について説明した反外挂の資料を見ました.私は自分でコードを書いてテストして、公式サイトでダウンロードしたODロードプログラムは、確かにデバッグを逆にする役割を果たしました.私は喜んでパッケージして、同僚にテストして、結局彼は彼の改良版ODで意外にも邪魔なデバッグができて、私はその時涙を流しました.あまり話さないで、直接コードをつけます.
クラステンプレート2つ、ClassExcクラステンプレートでは、例外が発生した場合に、クラスのメンバー関数をコールバックとして使用できます.NormalExcクラステンプレートでは、例外が発生した場合、通常の関数をコールバックとして使用できます.
コードは非常に簡単で、一般的なODロードでテストすることができます.
転載先:https://www.cnblogs.com/cdh49/p/3688489.html
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