Beispiel #1
0
    def _gen_x86_xstate(self, pid, tid):
        """
        Generate NT_X86_XSTATE note for thread tid of process pid.
        """
        core = self.cores[tid]
        fpregs = core["thread_info"]["fpregs"]

        data = elf.elf_xsave_struct()
        ctypes.memset(ctypes.addressof(data), 0, ctypes.sizeof(data))

        data.i387.cwd = fpregs["cwd"]
        data.i387.swd = fpregs["swd"]
        data.i387.twd = fpregs["twd"]
        data.i387.fop = fpregs["fop"]
        data.i387.rip = fpregs["rip"]
        data.i387.rdp = fpregs["rdp"]
        data.i387.mxcsr = fpregs["mxcsr"]
        data.i387.mxcsr_mask = fpregs["mxcsr_mask"]
        data.i387.st_space = (ctypes.c_uint *
                              len(fpregs["st_space"]))(*fpregs["st_space"])
        data.i387.xmm_space = (ctypes.c_uint *
                               len(fpregs["xmm_space"]))(*fpregs["xmm_space"])

        if "xsave" in fpregs:
            data.xsave_hdr.xstate_bv = fpregs["xsave"]["xstate_bv"]
            data.ymmh.ymmh_space = (ctypes.c_uint *
                                    len(fpregs["xsave"]["ymmh_space"]))(
                                        *fpregs["xsave"]["ymmh_space"])

        nhdr = elf.Elf64_Nhdr()
        nhdr.n_namesz = 6
        nhdr.n_descsz = ctypes.sizeof(data)
        nhdr.n_type = elf.NT_X86_XSTATE

        note = elf_note()
        note.data = data
        note.owner = "LINUX"
        note.nhdr = nhdr

        return note
Beispiel #2
0
	def _gen_x86_xstate(self, pid, tid):
		"""
		Generate NT_X86_XSTATE note for thread tid of process pid.
		"""
		core	= self.cores[tid]
		fpregs	= core["thread_info"]["fpregs"]

		data = elf.elf_xsave_struct()
		ctypes.memset(ctypes.addressof(data), 0, ctypes.sizeof(data))

		data.i387.cwd		= fpregs["cwd"]
		data.i387.swd		= fpregs["swd"]
		data.i387.twd		= fpregs["twd"]
		data.i387.fop		= fpregs["fop"]
		data.i387.rip		= fpregs["rip"]
		data.i387.rdp		= fpregs["rdp"]
		data.i387.mxcsr		= fpregs["mxcsr"]
		data.i387.mxcsr_mask	= fpregs["mxcsr_mask"]
		data.i387.st_space	= (ctypes.c_uint * len(fpregs["st_space"]))(*fpregs["st_space"])
		data.i387.xmm_space	= (ctypes.c_uint * len(fpregs["xmm_space"]))(*fpregs["xmm_space"])

		if "xsave" in fpregs:
			data.xsave_hdr.xstate_bv = fpregs["xsave"]["xstate_bv"]
			data.ymmh.ymmh_space	= (ctypes.c_uint * len(fpregs["xsave"]["ymmh_space"]))(*fpregs["xsave"]["ymmh_space"])

		nhdr = elf.Elf64_Nhdr()
		nhdr.n_namesz	= 6
		nhdr.n_descsz	= ctypes.sizeof(data)
		nhdr.n_type	= elf.NT_X86_XSTATE

		note = elf_note()
		note.data	= data
		note.owner	= "LINUX"
		note.nhdr 	= nhdr

		return note