/// <summary>
        /// 创建一个 native Hooker
        /// </summary>
        /// <param name="libraryName">C/C++ 本地库名字</param>
        /// <param name="symbol">方法符号</param>
        /// <param name="replace">替换委托</param>
        public NativeMethodHooker(string libraryName, string symbol, Delegate replace)
        {
            SetupJmpBuff();

            IntPtr targetPtr = NativeAPI.miku_hooker_get_address(libraryName, symbol);

            _headSize      = (int)LDasm.SizeofMinNumByte(targetPtr.ToPointer(), s_jmpBuff.Length);
            _proxyBuffSize = _headSize + s_jmpBuff.Length;

            _targetPtr = targetPtr;
            _replacPtr = Marshal.GetFunctionPointerForDelegate(replace);
            _proxyPtr  = (byte *)NativeAPI.miku_hooker_jit_alloc(IntPtr.Zero, _proxyBuffSize);

            Install();
        }
        /// <summary>
        /// 创建一个 Hooker
        /// </summary>
        /// <param name="target">需要替换的目标方法</param>
        /// <param name="replace">准备好的替换方法</param>
        private CSharpMethodHooker(MethodBase target, MethodBase replace, MethodBase proxy)
        {
            SetupJmpBuff();

            IntPtr targetPtr  = NativeAPI.GetFunctionAddr(target);
            IntPtr replacePtr = NativeAPI.GetFunctionAddr(replace);
            IntPtr proxyPtr   = NativeAPI.GetFunctionAddr(proxy);

            _headSize      = (int)LDasm.SizeofMinNumByte(targetPtr.ToPointer(), s_jmpBuff.Length);
            _proxyBuffSize = _headSize + s_jmpBuff.Length;
            _proxyPtr      = (byte *)proxyPtr.ToPointer();

            _targetPtr = targetPtr;
            _replacPtr = replacePtr;

            Install();
        }