差分
このページの2つのバージョン間の差分を表示します。
両方とも前のリビジョン 前のリビジョン 次のリビジョン | 前のリビジョン | ||
appendix:garbagecollectorを止める方法 [2022/03/03 12:54] fumble |
appendix:garbagecollectorを止める方法 [2022/03/07 09:58] (現在) fumble |
||
---|---|---|---|
行 1: | 行 1: | ||
=====GC停止の方法===== | =====GC停止の方法===== | ||
System.GC.Collectからたどるとves_icall_System_GC_InternalCollectに行き着くじゃろ。\\ | System.GC.Collectからたどるとves_icall_System_GC_InternalCollectに行き着くじゃろ。\\ | ||
- | それの宣言を探したら https:// | + | それの宣言を探したら |
- | extern void mono_gc_enable (void) MONO_INTERNAL; | + | <code cpp> |
- | extern void mono_gc_disable (void) MONO_INTERNAL; | + | extern void mono_gc_enable (void) MONO_INTERNAL; |
- | があるじゃろ、あとはわかるな?\\ | + | extern void mono_gc_disable (void) MONO_INTERNAL; |
+ | </ | ||
+ | というあやしげな宣言があるじゃろ、あとはわかるな?\\ | ||
+ | MONO_INTERNALが邪魔で見えない?心の目で見るんだ!\\ | ||
+ | 心の目をもってしても見えないじゃと?!\\ | ||
+ | <code cpp> | ||
+ | typedef __int64 (CALLBACK* gcgetheapsize)(); | ||
+ | typedef void (CALLBACK* gcenabledisable)(); | ||
+ | void 心眼() | ||
+ | { | ||
+ | auto module = :: | ||
+ | if (module != nullptr) | ||
+ | { | ||
+ | auto getheapsize = (gcgetheapsize):: | ||
+ | auto heapsize = getheapsize(); | ||
+ | auto disable = (gcenabledisable)((__int64):: | ||
+ | auto enable = (gcenabledisable)((__int64):: | ||
+ | disable(); | ||
+ | enable(); | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | これをトレースし、getheapsize(); | ||
+ | < | ||
+ | 00007FFAA93DB190 E9 D3 C5 13 00 | ||
+ | 00007FFAA93DB195 CC | ||
+ | 00007FFAA93DB196 CC | ||
+ | 00007FFAA93DB197 CC | ||
+ | 00007FFAA93DB198 E9 CF C6 13 00 | ||
+ | 00007FFAA93DB19D CC | ||
+ | 00007FFAA93DB19E CC | ||
+ | 00007FFAA93DB19F CC | ||
+ | 00007FFAA93DB1A0 E9 9B C6 13 00 | ||
+ | 00007FFAA93DB1A5 CC | ||
+ | 00007FFAA93DB1A6 CC | ||
+ | 00007FFAA93DB1A7 CC | ||
+ | 00007FFAA93DB1A8 E9 D7 D8 13 00 | ||
+ | 00007FFAA93DB1AD CC | ||
+ | 00007FFAA93DB1AE CC | ||
+ | 00007FFAA93DB1AF CC | ||
+ | </ | ||
+ | 実装順でそれぞれの関数にジャンプするようになっておるじゃろ。\\ | ||
+ | きれいに8バイトでパディングされておるじゃろ。\\ | ||
+ | mono_gc_get_heap_size\\ | ||
+ | < | ||
+ | 00007FFAA93DB190 E9 D3 C5 13 00 | ||
+ | </ | ||
+ | mono_gc_disable\\ | ||
+ | < | ||
+ | 00007FFAA93DB198 E9 CF C6 13 00 | ||
+ | </ | ||
+ | mono_gc_enable\\ | ||
+ | < | ||
+ | 00007FFAA93DB1A0 E9 9B C6 13 00 | ||
+ | </ | ||
+ | 今度こそこれでわかるな?\\ | ||
+ | 飛んだ先が正しいかもちゃんとステップインして確認するのじゃぞ?\\ |