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