Exemplo n.º 1
0
 /// <summary>
 /// Constructor
 /// </summary>
 /// <param name="dll">DLL name including dll extension, case sensitive. It can be any name, it's only used to make sure only one handler patches a function.</param>
 /// <param name="function">Function name, case sensitive. It can be any name, it's only used to make sure only one handler patches a function.</param>
 /// <param name="machine">Supported machine</param>
 /// <param name="order">Order</param>
 public ExportDbgNativeFunctionHookAttribute(string dll, string function, DbgMachine machine, double order = double.MaxValue)
     : this(dll, function, new[] { machine }, order)
 {
 }
        static bool TryGetRegisterX86(DbgMachine machine, CorDebugRegister corReg, out X86Register register)
        {
            switch (machine)
            {
            case DbgMachine.X86:
                switch (corReg)
                {
                case CorDebugRegister.REGISTER_X86_EIP:
                    register = X86Register.EIP;
                    return(true);

                case CorDebugRegister.REGISTER_X86_ESP:
                    register = X86Register.ESP;
                    return(true);

                case CorDebugRegister.REGISTER_X86_EBP:
                    register = X86Register.EBP;
                    return(true);

                case CorDebugRegister.REGISTER_X86_EAX:
                    register = X86Register.EAX;
                    return(true);

                case CorDebugRegister.REGISTER_X86_ECX:
                    register = X86Register.ECX;
                    return(true);

                case CorDebugRegister.REGISTER_X86_EDX:
                    register = X86Register.EDX;
                    return(true);

                case CorDebugRegister.REGISTER_X86_EBX:
                    register = X86Register.EBX;
                    return(true);

                case CorDebugRegister.REGISTER_X86_ESI:
                    register = X86Register.ESI;
                    return(true);

                case CorDebugRegister.REGISTER_X86_EDI:
                    register = X86Register.EDI;
                    return(true);

                case CorDebugRegister.REGISTER_X86_FPSTACK_0:
                    register = X86Register.ST0;
                    return(true);

                case CorDebugRegister.REGISTER_X86_FPSTACK_1:
                    register = X86Register.ST1;
                    return(true);

                case CorDebugRegister.REGISTER_X86_FPSTACK_2:
                    register = X86Register.ST2;
                    return(true);

                case CorDebugRegister.REGISTER_X86_FPSTACK_3:
                    register = X86Register.ST3;
                    return(true);

                case CorDebugRegister.REGISTER_X86_FPSTACK_4:
                    register = X86Register.ST4;
                    return(true);

                case CorDebugRegister.REGISTER_X86_FPSTACK_5:
                    register = X86Register.ST5;
                    return(true);

                case CorDebugRegister.REGISTER_X86_FPSTACK_6:
                    register = X86Register.ST6;
                    return(true);

                case CorDebugRegister.REGISTER_X86_FPSTACK_7:
                    register = X86Register.ST7;
                    return(true);

                default:
                    Debug.Fail($"Unknown register number {(int)corReg}");
                    register = default;
                    return(false);
                }

            case DbgMachine.X64:
                switch (corReg)
                {
                case CorDebugRegister.REGISTER_AMD64_RIP:
                    register = X86Register.RIP;
                    return(true);

                case CorDebugRegister.REGISTER_AMD64_RSP:
                    register = X86Register.RSP;
                    return(true);

                case CorDebugRegister.REGISTER_AMD64_RBP:
                    register = X86Register.RBP;
                    return(true);

                case CorDebugRegister.REGISTER_AMD64_RAX:
                    register = X86Register.RAX;
                    return(true);

                case CorDebugRegister.REGISTER_AMD64_RCX:
                    register = X86Register.RCX;
                    return(true);

                case CorDebugRegister.REGISTER_AMD64_RDX:
                    register = X86Register.RDX;
                    return(true);

                case CorDebugRegister.REGISTER_AMD64_RBX:
                    register = X86Register.RBX;
                    return(true);

                case CorDebugRegister.REGISTER_AMD64_RSI:
                    register = X86Register.RSI;
                    return(true);

                case CorDebugRegister.REGISTER_AMD64_RDI:
                    register = X86Register.RDI;
                    return(true);

                case CorDebugRegister.REGISTER_AMD64_R8:
                    register = X86Register.R8;
                    return(true);

                case CorDebugRegister.REGISTER_AMD64_R9:
                    register = X86Register.R9;
                    return(true);

                case CorDebugRegister.REGISTER_AMD64_R10:
                    register = X86Register.R10;
                    return(true);

                case CorDebugRegister.REGISTER_AMD64_R11:
                    register = X86Register.R11;
                    return(true);

                case CorDebugRegister.REGISTER_AMD64_R12:
                    register = X86Register.R12;
                    return(true);

                case CorDebugRegister.REGISTER_AMD64_R13:
                    register = X86Register.R13;
                    return(true);

                case CorDebugRegister.REGISTER_AMD64_R14:
                    register = X86Register.R14;
                    return(true);

                case CorDebugRegister.REGISTER_AMD64_R15:
                    register = X86Register.R15;
                    return(true);

                case CorDebugRegister.REGISTER_AMD64_XMM0:
                    register = X86Register.XMM0;
                    return(true);

                case CorDebugRegister.REGISTER_AMD64_XMM1:
                    register = X86Register.XMM1;
                    return(true);

                case CorDebugRegister.REGISTER_AMD64_XMM2:
                    register = X86Register.XMM2;
                    return(true);

                case CorDebugRegister.REGISTER_AMD64_XMM3:
                    register = X86Register.XMM3;
                    return(true);

                case CorDebugRegister.REGISTER_AMD64_XMM4:
                    register = X86Register.XMM4;
                    return(true);

                case CorDebugRegister.REGISTER_AMD64_XMM5:
                    register = X86Register.XMM5;
                    return(true);

                case CorDebugRegister.REGISTER_AMD64_XMM6:
                    register = X86Register.XMM6;
                    return(true);

                case CorDebugRegister.REGISTER_AMD64_XMM7:
                    register = X86Register.XMM7;
                    return(true);

                case CorDebugRegister.REGISTER_AMD64_XMM8:
                    register = X86Register.XMM8;
                    return(true);

                case CorDebugRegister.REGISTER_AMD64_XMM9:
                    register = X86Register.XMM9;
                    return(true);

                case CorDebugRegister.REGISTER_AMD64_XMM10:
                    register = X86Register.XMM10;
                    return(true);

                case CorDebugRegister.REGISTER_AMD64_XMM11:
                    register = X86Register.XMM11;
                    return(true);

                case CorDebugRegister.REGISTER_AMD64_XMM12:
                    register = X86Register.XMM12;
                    return(true);

                case CorDebugRegister.REGISTER_AMD64_XMM13:
                    register = X86Register.XMM13;
                    return(true);

                case CorDebugRegister.REGISTER_AMD64_XMM14:
                    register = X86Register.XMM14;
                    return(true);

                case CorDebugRegister.REGISTER_AMD64_XMM15:
                    register = X86Register.XMM15;
                    return(true);

                default:
                    Debug.Fail($"Unknown register number {(int)corReg}");
                    register = default;
                    return(false);
                }

            case DbgMachine.Arm:
            case DbgMachine.Arm64:
            default:
                Debug.Fail($"Unsupported machine: {machine}");
                register = default;
                return(false);
            }
        }
Exemplo n.º 3
0
 public Key(DbgMachine machine, DbgOperatingSystem operatingSystem)
 {
     this.machine         = machine;
     this.operatingSystem = operatingSystem;
 }