class Metasm::PTraceContext_X64
Constants
- C_STRUCT
Public Instance Methods
do_getregs()
click to toggle source
# File metasm/os/linux.rb, line 1069 def do_getregs st = cp.alloc_c_struct('user_regs_struct_x64') getregs(st) st end
do_getxmm()
click to toggle source
# File metasm/os/linux.rb, line 1079 def do_getxmm st = cp.alloc_c_struct('user_i387_struct_x64') getfpregs(st) st end
do_setregs(st=@gpr_st)
click to toggle source
# File metasm/os/linux.rb, line 1075 def do_setregs(st=@gpr_st) setregs(st) end
do_setxmm(st=@xmm_st)
click to toggle source
# File metasm/os/linux.rb, line 1085 def do_setxmm(st=@xmm_st) setfpregs(st) end
gpr_sub_init()
click to toggle source
# File metasm/os/linux.rb, line 1042 def gpr_sub_init ret = {} %w[a b c d].each { |r| b = "r#{r}x".to_sym ret["e#{r}x".to_sym] = [b, 0xffff_ffff] ret[ "#{r}x".to_sym] = [b, 0xffff] ret[ "#{r}l".to_sym] = [b, 0xff] ret[ "#{r}h".to_sym] = [b, 0xff, 8] } %w[sp bp si di].each { |r| b = "r#{r}".to_sym ret["e#{r}".to_sym] = [b, 0xffff_ffff] ret[ "#{r}".to_sym] = [b, 0xffff] ret["#{r}l".to_sym] = [b, 0xff] } (8..15).each { |i| b = "r#{i}".to_sym ret["r#{i}d"] = [b, 0xffff_ffff] ret["r#{i}w"] = [b, 0xffff] ret["r#{i}b"] = [b, 0xff] } ret[:eip] = [:rip, 0xffff_ffff] ret[:eflags] = [:rflags, 0xffff_ffff] ret[:orig_eax] = [:orig_rax, 0xffff_ffff] ret end
init()
click to toggle source
# File metasm/os/linux.rb, line 1028 def init @gpr = @@gpr_x64 ||= [:r15, :r14, :r13, :r12, :rbp, :rbx, :r11, :r10, :r9, :r8, :rax, :rcx, :rdx, :rsi, :rdi, :orig_rax, :rip, :cs, :rflags, :rsp, :ss, :fs_base, :gs_base, :ds, :es, :fs, :gs].inject({}) { |h, r| h.update r => true } @gpr_peek = @@gpr_peek_x64 ||= (0..7).inject({}) { |h, i| h.update "dr#{i}".to_sym => REGS_X86_64["DR#{i}"] } @gpr_sub = @@gpr_sub_x64 ||= gpr_sub_init @xmm = @@xmm_x64 ||= [:cwd, :swd, :twd, :fop, :rip, :rdp, :mxcsr, :mxcsr_mask].inject({}) { |h, r| h.update r => true } @cp.parse C_STRUCT if not @cp.toplevel.struct['user_regs_struct_x64'] @gpr_st = @xmm_st = nil end