Type CONTEXT [src]

Members

Source

pub const CONTEXT = switch (native_arch) { .x86 => extern struct { ContextFlags: DWORD, Dr0: DWORD, Dr1: DWORD, Dr2: DWORD, Dr3: DWORD, Dr6: DWORD, Dr7: DWORD, FloatSave: FLOATING_SAVE_AREA, SegGs: DWORD, SegFs: DWORD, SegEs: DWORD, SegDs: DWORD, Edi: DWORD, Esi: DWORD, Ebx: DWORD, Edx: DWORD, Ecx: DWORD, Eax: DWORD, Ebp: DWORD, Eip: DWORD, SegCs: DWORD, EFlags: DWORD, Esp: DWORD, SegSs: DWORD, ExtendedRegisters: [512]BYTE, pub fn getRegs(ctx: *const CONTEXT) struct { bp: usize, ip: usize } { return .{ .bp = ctx.Ebp, .ip = ctx.Eip }; } }, .x86_64 => extern struct { P1Home: DWORD64 align(16), P2Home: DWORD64, P3Home: DWORD64, P4Home: DWORD64, P5Home: DWORD64, P6Home: DWORD64, ContextFlags: DWORD, MxCsr: DWORD, SegCs: WORD, SegDs: WORD, SegEs: WORD, SegFs: WORD, SegGs: WORD, SegSs: WORD, EFlags: DWORD, Dr0: DWORD64, Dr1: DWORD64, Dr2: DWORD64, Dr3: DWORD64, Dr6: DWORD64, Dr7: DWORD64, Rax: DWORD64, Rcx: DWORD64, Rdx: DWORD64, Rbx: DWORD64, Rsp: DWORD64, Rbp: DWORD64, Rsi: DWORD64, Rdi: DWORD64, R8: DWORD64, R9: DWORD64, R10: DWORD64, R11: DWORD64, R12: DWORD64, R13: DWORD64, R14: DWORD64, R15: DWORD64, Rip: DWORD64, DUMMYUNIONNAME: extern union { FltSave: XMM_SAVE_AREA32, FloatSave: XMM_SAVE_AREA32, DUMMYSTRUCTNAME: extern struct { Header: [2]M128A, Legacy: [8]M128A, Xmm0: M128A, Xmm1: M128A, Xmm2: M128A, Xmm3: M128A, Xmm4: M128A, Xmm5: M128A, Xmm6: M128A, Xmm7: M128A, Xmm8: M128A, Xmm9: M128A, Xmm10: M128A, Xmm11: M128A, Xmm12: M128A, Xmm13: M128A, Xmm14: M128A, Xmm15: M128A, }, }, VectorRegister: [26]M128A, VectorControl: DWORD64, DebugControl: DWORD64, LastBranchToRip: DWORD64, LastBranchFromRip: DWORD64, LastExceptionToRip: DWORD64, LastExceptionFromRip: DWORD64, pub fn getRegs(ctx: *const CONTEXT) struct { bp: usize, ip: usize, sp: usize } { return .{ .bp = ctx.Rbp, .ip = ctx.Rip, .sp = ctx.Rsp }; } pub fn setIp(ctx: *CONTEXT, ip: usize) void { ctx.Rip = ip; } pub fn setSp(ctx: *CONTEXT, sp: usize) void { ctx.Rsp = sp; } }, .thumb => extern struct { ContextFlags: ULONG, R0: ULONG, R1: ULONG, R2: ULONG, R3: ULONG, R4: ULONG, R5: ULONG, R6: ULONG, R7: ULONG, R8: ULONG, R9: ULONG, R10: ULONG, R11: ULONG, R12: ULONG, Sp: ULONG, Lr: ULONG, Pc: ULONG, Cpsr: ULONG, Fpcsr: ULONG, Padding: ULONG, DUMMYUNIONNAME: extern union { Q: [16]NEON128, D: [32]ULONGLONG, S: [32]ULONG, }, Bvr: [8]ULONG, Bcr: [8]ULONG, Wvr: [1]ULONG, Wcr: [1]ULONG, Padding2: [2]ULONG, pub fn getRegs(ctx: *const CONTEXT) struct { bp: usize, ip: usize, sp: usize } { return .{ .bp = ctx.DUMMYUNIONNAME.S[11], .ip = ctx.Pc, .sp = ctx.Sp, }; } pub fn setIp(ctx: *CONTEXT, ip: usize) void { ctx.Pc = ip; } pub fn setSp(ctx: *CONTEXT, sp: usize) void { ctx.Sp = sp; } }, .aarch64 => extern struct { ContextFlags: ULONG align(16), Cpsr: ULONG, DUMMYUNIONNAME: extern union { DUMMYSTRUCTNAME: extern struct { X0: DWORD64, X1: DWORD64, X2: DWORD64, X3: DWORD64, X4: DWORD64, X5: DWORD64, X6: DWORD64, X7: DWORD64, X8: DWORD64, X9: DWORD64, X10: DWORD64, X11: DWORD64, X12: DWORD64, X13: DWORD64, X14: DWORD64, X15: DWORD64, X16: DWORD64, X17: DWORD64, X18: DWORD64, X19: DWORD64, X20: DWORD64, X21: DWORD64, X22: DWORD64, X23: DWORD64, X24: DWORD64, X25: DWORD64, X26: DWORD64, X27: DWORD64, X28: DWORD64, Fp: DWORD64, Lr: DWORD64, }, X: [31]DWORD64, }, Sp: DWORD64, Pc: DWORD64, V: [32]NEON128, Fpcr: DWORD, Fpsr: DWORD, Bcr: [8]DWORD, Bvr: [8]DWORD64, Wcr: [2]DWORD, Wvr: [2]DWORD64, pub fn getRegs(ctx: *const CONTEXT) struct { bp: usize, ip: usize, sp: usize } { return .{ .bp = ctx.DUMMYUNIONNAME.DUMMYSTRUCTNAME.Fp, .ip = ctx.Pc, .sp = ctx.Sp, }; } pub fn setIp(ctx: *CONTEXT, ip: usize) void { ctx.Pc = ip; } pub fn setSp(ctx: *CONTEXT, sp: usize) void { ctx.Sp = sp; } }, else => @compileError("CONTEXT is not defined for this architecture"), }