/// <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); } }
public Key(DbgMachine machine, DbgOperatingSystem operatingSystem) { this.machine = machine; this.operatingSystem = operatingSystem; }