ユーザ用ツール

サイト用ツール


appendix:garbagecollectorを止める方法

差分

このページの2つのバージョン間の差分を表示します。

この比較画面にリンクする

両方とも前のリビジョン 前のリビジョン
次のリビジョン
前のリビジョン
appendix:garbagecollectorを止める方法 [2022/03/07 09:22]
fumble
appendix:garbagecollectorを止める方法 [2022/03/07 09:58] (現在)
fumble
行 8: 行 8:
 というあやしげな宣言があるじゃろ、あとはわかるな?\\ というあやしげな宣言があるじゃろ、あとはわかるな?\\
 MONO_INTERNALが邪魔で見えない?心の目で見るんだ!\\ MONO_INTERNALが邪魔で見えない?心の目で見るんだ!\\
-心の目をもってしても見えない?!\\+心の目をもってしても見えないじゃと?!\\
 <code cpp> <code cpp>
-typedef void(CALLBACK* gcenabledisable)();+typedef __int64 (CALLBACK* gcgetheapsize)(); 
 +typedef void    (CALLBACK* gcenabledisable)();
 void 心眼() void 心眼()
 { {
-    gcenabledisable disable; +    auto module = ::LoadLibrary(lpszMonoParh);
-    gcenabledisable enable; +
- +
-    auto module = LoadLibrary(lpszMonoParh);+
     if (module != nullptr)     if (module != nullptr)
     {     {
-        disable = (gcenabledisable)((_int64)GetProcAddress(module, "mono_gc_get_heap_size") + 8i64); +        auto getheapsize = (gcgetheapsize)::GetProcAddress(module, "mono_gc_get_heap_size"); 
-        enable = (gcenabledisable)((_int64)GetProcAddress(module, "mono_gc_get_heap_size") + 16i64);+        auto heapsize = getheapsize(); 
 +        auto disable = (gcenabledisable)((__int64)::GetProcAddress(module, "mono_gc_get_heap_size") + 8i64); 
 +        auto enable = (gcenabledisable)((__int64)::GetProcAddress(module, "mono_gc_get_heap_size") + 16i64);
         disable();         disable();
         enable();         enable();
     }     }
-    CDialogEx::OnOK(); 
 } }
 </code>  </code> 
-これをトレースするのじゃ。+これをトレースし、getheapsize();の呼び出しのところをステップインするのじゃ、 
 +<code> 
 +00007FFAA93DB190 E9 D3 C5 13 00       jmp         00007FFAA9517768   
 +00007FFAA93DB195 CC                   int           
 +00007FFAA93DB196 CC                   int           
 +00007FFAA93DB197 CC                   int           
 +00007FFAA93DB198 E9 CF C6 13 00       jmp         00007FFAA951786C   
 +00007FFAA93DB19D CC                   int           
 +00007FFAA93DB19E CC                   int           
 +00007FFAA93DB19F CC                   int           
 +00007FFAA93DB1A0 E9 9B C6 13 00       jmp         00007FFAA9517840   
 +00007FFAA93DB1A5 CC                   int           
 +00007FFAA93DB1A6 CC                   int           
 +00007FFAA93DB1A7 CC                   int           
 +00007FFAA93DB1A8 E9 D7 D8 13 00       jmp         00007FFAA9518A84   
 +00007FFAA93DB1AD CC                   int           
 +00007FFAA93DB1AE CC                   int           
 +00007FFAA93DB1AF CC                   int           
 +</code>  
 +実装順でそれぞれの関数にジャンプするようになっておるじゃろ\\ 
 +きれいに8バイトでパディングされておるじゃろ。\\ 
 +mono_gc_get_heap_size\\ 
 +<code> 
 +00007FFAA93DB190 E9 D3 C5 13 00       jmp         00007FFAA9517768   
 +</code> 
 +mono_gc_disable\\ 
 +<code> 
 +00007FFAA93DB198 E9 CF C6 13 00       jmp         00007FFAA951786C   
 +</code> 
 +mono_gc_enable\\ 
 +<code> 
 +00007FFAA93DB1A0 E9 9B C6 13 00       jmp         00007FFAA9517840   
 +</code> 
 +今度こそこれでわかるな?\\ 
 +飛んだ先が正しいかもちゃんとステップインして確認するのじゃぞ?\\
appendix/garbagecollectorを止める方法.1646612550.txt.gz · 最終更新: 2022/03/07 09:22 by fumble