コード例 #1
0
        void SetupHooks(DkmProcess process, LuaRemoteProcessData processData)
        {
            processData.hooksEnabled = true;

            foreach (var stateKV in processData.knownStates)
            {
                var state = stateKV.Value;

                DebugHelpers.TryWritePointerVariable(process, state.hookFunctionAddress, state.helperHookFunctionAddress);

                if (processData.luaVersion == 503 || processData.luaVersion == 504)
                {
                    DebugHelpers.TryWriteIntVariable(process, state.hookMaskAddress, 7); // LUA_HOOKLINE | LUA_HOOKCALL | LUA_HOOKRET
                }
                else
                {
                    DebugHelpers.TryWriteByteVariable(process, state.hookMaskAddress, 7); // LUA_HOOKLINE | LUA_HOOKCALL | LUA_HOOKRET
                }
                DebugHelpers.TryWriteIntVariable(process, state.hookBaseCountAddress, 0);
                DebugHelpers.TryWriteIntVariable(process, state.hookCountAddress, 0);

                // Lua 5.4 has to update 'trap' flag for all Lua call stack frames
                if (processData.luaVersion == 504)
                {
                    ulong?callInfo = DebugHelpers.ReadPointerVariable(process, state.stateAddress + state.setTrapStateCallInfoOffset);

                    while (callInfo.HasValue && callInfo.Value != 0)
                    {
                        var callStatus = DebugHelpers.ReadShortVariable(process, callInfo.Value + state.setTrapCallInfoCallStatusOffset);

                        if (callStatus.HasValue && (callStatus.Value & (int)CallStatus_5_4.C) == 0)
                        {
                            if (!DebugHelpers.TryWriteIntVariable(process, callInfo.Value + state.setTrapCallInfoTrapOffset, 1))
                            {
                                break;
                            }
                        }

                        callInfo = DebugHelpers.ReadPointerVariable(process, callInfo.Value + state.setTrapCallInfoPreviousOffset);
                    }
                }
            }
        }