Exemple #1
0
    def invoke(self, arg, from_tty):
        args = UdkCommandHelper.checkParameterEx(arg, 0, 2)
        if args == None:
            return

        if len(args) < 2:
            subindex = 0
        else:
            try:
                subindex = int(args[1], 16)
            except:
                print(ARGUMENT_INVALID_SUBINDEX)
                return
        if len(args) < 1:
            index = 1
        else:
            try:
                index = int(args[0], 16)
            except:
                print(ARGUMENT_INVALID_INDEX)
                return
        response = UdkCommandHelper.sendUdkExtensionPacket("cpuid,%08x,%08x" %
                                                           (index, subindex))
        try:
            print(CPUID_INPUT % (index, subindex))
            (eax, ebx, ecx, edx) = [int(v, 16) for v in response.split(",")]
            print(CPUID_OUTPUT % (eax, ebx, ecx, edx))
        except Exception:
            print(FAILED_TO_EXECUTE_COMMAND % response)
def WriteRegister(Name, Value):
    response = UdkCommandHelper.sendPacket(
        "P%x=%s" %
        (_RegisterIndex(Name), UdkCommandHelper.list_to_string(Value)))
    if response == "OK":
        UdkCommandHelper.executeCommand("flushregs")
    return response == "OK"
def WriteRegister(Name, Value):
    response = UdkCommandHelper.sendPacket(
                 "P%x=%s" % (_RegisterIndex(Name), UdkCommandHelper.list_to_string(Value))
                 )
    if response == "OK":
        UdkCommandHelper.executeCommand("flushregs")
    return response == "OK"
Exemple #4
0
 def _query(self):
     image_info = []
     response = UdkCommandHelper.sendUdkExtensionPacket("fmodules")
     while response != "l":
         image_info.append(response.split(";"))
         response = UdkCommandHelper.sendUdkExtensionPacket("smodules")
     return image_info
def SearchSignature(Address, Length, Alignment, Positive, Signature):
    response = UdkCommandHelper.sendUdkExtensionPacket(
        "search,%x,%x,%x,%x,%s" % (Address, Length, Alignment, Positive,
                                   UdkCommandHelper.list_to_string(Signature)))
    if response == "":
        return None
    else:
        return int(response, 16)
Exemple #6
0
    def invoke(self, arg, from_tty):
        self.dont_repeat()
        args = UdkCommandHelper.checkParameter(arg, 0)
        if args == None:
            return

        for line in UdkCommandHelper.executeCommand("signal SIGKILL"):
            print(line)
def WriteIo(Address, Size, Value):
    response = UdkCommandHelper.sendUdkExtensionPacket(
        "IO%x,%x:%s" %
        (Address, Size, UdkCommandHelper.long_to_string(Value, Size)))
    if response != "OK":
        return False
    else:
        return True
Exemple #8
0
 def invoke(self, arg, from_tty):
     self.dont_repeat()
     args = UdkCommandHelper.checkParameter(arg, 1)
     if args != None:
         if args[0] not in ["on", "off"]:
             print(ARGUMENT_ON_OFF_EXPECTED)
             return
         UdkCommandHelper.sendUdkExtensionPacket("bootscriptentrybreak:%s" %
                                                 args[0])
Exemple #9
0
 def invoke(self, arg, from_tty):
     args = UdkCommandHelper.checkParameter(arg, 0)
     if args != None:
         response = UdkCommandHelper.sendUdkExtensionPacket("exception")
         if response != "":
             (vector, error_code) = response.split(";")
             vector = int(vector, 16)
             error_code = int(error_code, 16)
             print(EXCEPTION_INFO % (vector, error_code))
def SearchSignature(Address, Length, Alignment, Positive, Signature):
    response = UdkCommandHelper.sendUdkExtensionPacket(
                 "search,%x,%x,%x,%x,%s" % (
                   Address, Length, Alignment, Positive, UdkCommandHelper.list_to_string(Signature)
                   )
                 )
    if response == "":
        return None
    else:
        return int(response, 16)
Exemple #11
0
    def invoke(self, arg, from_tty):
        self.dont_repeat()
        args = UdkCommandHelper.checkParameter(arg, 0)
        if args == None:
            return

        response = UdkCommandHelper.sendUdkExtensionPacket("arch")
        valid_architectures = ['i386', 'i386:x86-64']
        if response in valid_architectures:
            UdkCommandHelper.executeCommand(
                "set architecture {}".format(response))
def ReadMsr(Index):
    response = UdkCommandHelper.sendUdkExtensionPacket("msr%x" % Index)
    m = re.match('E([0-9A-Fa-f]+)', response)
    if m != None:
        return None
    else:
        return int(response, 16)
def WriteMsr(Index, Value):
    response = UdkCommandHelper.sendUdkExtensionPacket("MSR%x=%x" %
                                                       (Index, Value))
    if response != "OK":
        return False
    else:
        return True
def ReadMsr(Index):
    response = UdkCommandHelper.sendUdkExtensionPacket("msr%x" % Index)
    m = re.match('E([0-9A-Fa-f]+)', response)
    if m != None:
        return None
    else:
        return int(response, 16)
Exemple #15
0
    def invoke(self, arg, from_tty):
        self.dont_repeat()
        args = UdkCommandHelper.checkParameter(arg, 0)
        if args == None:
            return

        response = UdkCommandHelper.sendUdkExtensionPacket("fmodules")
        while response != "l":
            (image_entry, image_base, image_name) = response.split(";")
            response = UdkCommandHelper.sendUdkExtensionPacket("smodules")
            pe_sig = UdkCommandHelper.executeCommand("x/hx %s" %
                                                     image_base)[0].split()[1]
            if pe_sig in ["0x5a4d", "0x5a56"]:
                print(LOADING_SYMBOL_FOR_MODULE % (image_base, image_name))
                self._imageloader.loadsymbol(int(image_entry, 16), False,
                                             False)
            else:
                print(SKIPPING_SYMBOL_FOR_MODULE % (image_base, image_name))
Exemple #16
0
    def invoke(self, arg, from_tty):
        args = UdkCommandHelper.checkParameter(arg, 2)
        if args == None:
            return

        try:
            (port, size) = self.parse_port(args)
        except:
            return

        response = UdkCommandHelper.sendUdkExtensionPacket("Z5,%x,%x" %
                                                           (port, size))
        if response != "OK":
            print(FAILED_TO_EXECUTE_COMMAND % response)
        else:
            self._num_watchpoints += 1
            self._watchpoints[self._num_watchpoints] = (port, size)
            print(IO_WATCH_POINT_INFO % (self._num_watchpoints, port, size))
Exemple #17
0
    def invoke(self, arg, from_tty):
        self.dont_repeat()
        args = UdkCommandHelper.checkParameter(arg, 1)
        if args == None:
            return
        if args[0] not in ["on", "off"]:
            print(ARGUMENT_ON_OFF_EXPECTED)
            return

        UdkCommandHelper._debugMode = (args[0] == "on")
Exemple #18
0
    def delete(self, arg):
        args = UdkCommandHelper.checkParameterEx(arg, 0, 1)
        if args == None:
            return

        if len(args) == 1:
            try:
                args[0] = int(args[0], 10)
            except:
                args[0] = 0

            if args[0] == 0:
                print(ARGUMENT_MUST_BE_NUMBER_1_BASED)
                return

        for index, (port, size) in list(self._watchpoints.items()):
            if len(args) == 0 or args[0] == index:
                response = UdkCommandHelper.sendUdkExtensionPacket(
                    "z5,%x,%x" % (port, size))
                if response != "OK":
                    print(FAILED_TO_EXECUTE_COMMAND % response)
                else:
                    del self._watchpoints[index]
Exemple #19
0
 def invoke(self, arg, from_tty):
     args = UdkCommandHelper.checkParameterEx(arg, 0, 1)
     if args != None:
         self.dont_repeat()
         if len(args) == 0:
             cur = gdb.selected_frame().pc()
         else:
             try:
                 cur = int(args[0], 16)
             except:
                 print(ARGUMENT_HEX_EXPECTED)
                 return
         print(LOADING_SYMBOL % cur)
         self._imageloader.loadsymbol(cur, True)
Exemple #20
0
    def invoke(self, arg, from_tty):
        self.dont_repeat()
        args = list(
            map(str.lower,
                UdkCommandHelper.checkParameterEx(arg, 0, 0xffffffff)))
        if args == None:
            return

        print("ENTRY\tBASE\tNAME")
        print("====================================")
        for (image_entry, image_base, image_name) in self._query():
            if len(args) == 0 or image_name.lower() in args:
                print("%s\t%s\t%s" % (image_entry, image_base, image_name))
        print("")
Exemple #21
0
 def invoke(self, arg, from_tty):
     args = UdkCommandHelper.checkParameterEx(arg, 1, 2)
     if args != None:
         if len(args) == 1:
             index = int(args[0], 16)
             value = UdkExtension.ReadMsr(index)
             if value == None:
                 print(FAILED_TO_EXECUTE_COMMAND % response)
             else:
                 print("%016x" % value)
         else:
             index = int(args[0], 16)
             value = int(args[1], 16)
             if not UdkExtension.WriteMsr(index, value):
                 print(FAILED_TO_EXECUTE_COMMAND % response)
Exemple #22
0
    def invoke(self, arg, from_tty):
        args = UdkCommandHelper.checkParameterEx(arg, 2, 3)
        if args == None:
            return

        try:
            (port, size) = self.parse_port(args)
        except:
            return

        if len(args) == 2:
            value = UdkExtension.ReadIo(port, size)
            print("%0*x" % (size * 2, value))
        else:
            value = int(args[2], 16)
            if not UdkExtension.WriteIo(port, size, value):
                print(FAILED_TO_EXECUTE_COMMAND % response)
Exemple #23
0
    def list(self, arg):
        args = UdkCommandHelper.checkParameterEx(arg, 0, 1)
        if args == None:
            return

        if len(args) == 1:
            try:
                args[0] = int(args[0], 10)
            except:
                args[0] = 0

            if args[0] == 0:
                print(ARGUMENT_MUST_BE_NUMBER_1_BASED)
                return

        print("Num\tPort\tSize")
        for index, (port, size) in list(self._watchpoints.items()):
            if len(args) == 0 or args[0] == index:
                print("%d\t0x%x\t%d" % (index, port, size))
Exemple #24
0
    def loadsymbol(self, cur, force=False, display=True):
        if force and self._issymbolpresent(cur):
            self._removesymbol(cur)
        if not self._issymbolpresent(cur):
            debug_info = UdkCommandHelper.getTargetDebugInfo(cur)
            if (debug_info != None):
                (debug_link, image_addr, section_info) = debug_info
                if debug_link.endswith(".pdb"):
                    print(UNSUPPORTED_DEBUG_INFORMATION)
                    return False
                if debug_link == "" or \
                   ".text" not in section_info or ".data" not in section_info:
                    print(MISSING_DEBUG_INFORMATION)
                    return False

                # Mach-O uses segment loading
                cmd = "add-symbol-file %s 0x%x" % (debug_link,
                                                   section_info['.text'])
                #                for section_name, section_addr in list(section_info.items()):
                #                    if section_name not in [".debug", ".gnu_deb", ".reloc", ".text"]:
                #                        cmd += " -s %s 0x%x" % (section_name, section_addr)
                #                try:
                #                    if display:
                #                        gdb.execute(cmd)
                #                    else:
                #                        UdkCommandHelper.executeCommand(cmd)
                #               except RuntimeError as e:
                #                   if str(e).find("No such file or directory") != -1:
                #                       print(FAILED_TO_FIND_SYMBOL_FILE)
                #                   return False
                #               except Exception:
                #                   print(FAILED_TO_LOAD_SYMBOL)
                #                   return False
                self._addsymbol(section_info[".text"], section_info[".data"])
                return True
            else:
                print(FAILED_TO_FIND_DEBUG_INFORMATION)
                return False
        else:
            return True
def _RegisterIndex(Name):
    response = UdkCommandHelper.sendUdkExtensionPacket("arch")
    if response == "use64":
        regs = [
#0       1        2       3       4       5       6       7       8       9        A      B      C      D      E      F
 'rax',  'rbx',   'rcx',  'rdx',  'rsi',  'rdi',  'rbp',  'rsp',  'r8',   'r9',    'r10', 'r11', 'r12', 'r13', 'r14', 'r15',
 'rip',  'eflags','cs',   'ss',   'ds',   'es',   'fs',   'gs',   'st0',  'st1',   'st2', 'st3', 'st4', 'st5', 'st6', 'st7',
 'fctrl','fstat', 'ftag', 'fiseg','fioff','foseg','fooff','fop',  'xmm0', 'xmm1',  'xmm2','xmm3','xmm4','xmm5','xmm6','xmm7',
 'xmm8', 'xmm9',  'xmm10','xmm11','xmm12','xmm13','xmm14','xmm15','mxcsr','orig_rax'];
    elif response == "use32":
        regs = [
 'eax',  'ecx',   'edx',  'ebx',  'esp',  'ebp',  'esi',  'edi',  'eip',  'eflags','cs',  'ss',   'ds',   'es',   'fs',   'gs',
 'st0',  'st1',   'st2',  'st3',  'st4',  'st5',  'st6',  'st7',  'fctrl','fstat', 'ftag','fiseg','fioff','foseg','fooff','fop',
 'xmm0', 'xmm1',  'xmm2', 'xmm3', 'xmm4', 'xmm5', 'xmm6', 'xmm7', 'mxcsr','orig_eax'];
    else:
        return None

    index = 0
    for r in regs:
        if r == Name:
            return index
        index += 1
    return None
Exemple #26
0
    def invoke(self, arg, from_tty):
        self.dont_repeat()
        args = UdkCommandHelper.checkParameterEx(arg, 1, 0xffffffff)
        if args == None:
            return

        Help = False
        Time = False
        if args[0] == '/h':
            Help = True
            del args[0]
        elif args[0] == '/t':
            Time = True
            del args[0]

        if '.' in args[0]:
            (module, function) = args[0].split('.')
        else:
            (module, function) = (args[0], "invoke")
        module = self._import(module)
        try:
            function = module.__dict__[function]
        except:
            print(FAILED_TO_LOCATE_FUNCTION % (function, module.__name__))
            return

        if Help:
            print(function.__doc__)
            return
        else:
            Start = datetime.datetime.now()
            try:
                function(" ".join(args[1:]))
            except:
                traceback.print_exc()
            if Time:
                print(EXECUTION_TIME % (str(datetime.datetime.now() - Start)))
def ReadRegister(Name):
    response = UdkCommandHelper.sendPacket("p%x" % _RegisterIndex(Name))
    return UdkCommandHelper.string_to_list(response)
def ReadIo(Address, Size):
    return UdkCommandHelper.string_to_long(
        UdkCommandHelper.sendUdkExtensionPacket("io%x,%x" % (Address, Size)))
def GetArch():
    response = UdkCommandHelper.sendUdkExtensionPacket("arch")
    if response == "use32":
        return 1
    else:
        return 2
def ReadRegister(Name):
    response = UdkCommandHelper.sendPacket("p%x" % _RegisterIndex(Name))
    return UdkCommandHelper.string_to_list(response)
def ReadMemory(Address, Width, Count):
    response = UdkCommandHelper.sendUdkExtensionPacket("mmio%x,%x,%x" %
                                                       (Address, Width, Count))
    return UdkCommandHelper.string_to_list(response, Width)
def WriteMemory(Address, Width, Value):
    response = UdkCommandHelper.sendUdkExtensionPacket(
        "MMIO%x,%x,%x:%s" % (Address, Width, len(Value),
                             UdkCommandHelper.list_to_string(Value, Width)))
    return response == "OK"
def _RegisterIndex(Name):
    response = UdkCommandHelper.sendUdkExtensionPacket("arch")
    if response == "use64":
        regs = [
            #0       1        2       3       4       5       6       7       8       9        A      B      C      D      E      F
            'rax',
            'rbx',
            'rcx',
            'rdx',
            'rsi',
            'rdi',
            'rbp',
            'rsp',
            'r8',
            'r9',
            'r10',
            'r11',
            'r12',
            'r13',
            'r14',
            'r15',
            'rip',
            'eflags',
            'cs',
            'ss',
            'ds',
            'es',
            'fs',
            'gs',
            'st0',
            'st1',
            'st2',
            'st3',
            'st4',
            'st5',
            'st6',
            'st7',
            'fctrl',
            'fstat',
            'ftag',
            'fiseg',
            'fioff',
            'foseg',
            'fooff',
            'fop',
            'xmm0',
            'xmm1',
            'xmm2',
            'xmm3',
            'xmm4',
            'xmm5',
            'xmm6',
            'xmm7',
            'xmm8',
            'xmm9',
            'xmm10',
            'xmm11',
            'xmm12',
            'xmm13',
            'xmm14',
            'xmm15',
            'mxcsr',
            'orig_rax'
        ]
    elif response == "use32":
        regs = [
            'eax', 'ecx', 'edx', 'ebx', 'esp', 'ebp', 'esi', 'edi', 'eip',
            'eflags', 'cs', 'ss', 'ds', 'es', 'fs', 'gs', 'st0', 'st1', 'st2',
            'st3', 'st4', 'st5', 'st6', 'st7', 'fctrl', 'fstat', 'ftag',
            'fiseg', 'fioff', 'foseg', 'fooff', 'fop', 'xmm0', 'xmm1', 'xmm2',
            'xmm3', 'xmm4', 'xmm5', 'xmm6', 'xmm7', 'mxcsr', 'orig_eax'
        ]
    else:
        return None

    index = 0
    for r in regs:
        if r == Name:
            return index
        index += 1
    return None
def WriteIo(Address, Size, Value):
    response = UdkCommandHelper.sendUdkExtensionPacket("IO%x,%x:%s" % (Address, Size, UdkCommandHelper.long_to_string(Value, Size)))
    if response != "OK":
        return False
    else:
        return True
def GetArch():
    response = UdkCommandHelper.sendUdkExtensionPacket("arch")
    if response == "use32":
        return 1
    else:
        return 2
Exemple #36
0
 def invoke(self, arg, from_tty):
     self.dont_repeat()
     args = UdkCommandHelper.checkParameter(arg, 0)
     if args == None:
         return
     Edk2StopHandler2(None)
def ReadMemory(Address, Width, Count):
    response = UdkCommandHelper.sendUdkExtensionPacket(
                 "mmio%x,%x,%x" % (Address, Width, Count)
                 )
    return UdkCommandHelper.string_to_list(response, Width)
def WriteMemory(Address, Width, Value):
    response = UdkCommandHelper.sendUdkExtensionPacket(
                 "MMIO%x,%x,%x:%s" % (Address, Width, len(Value), UdkCommandHelper.list_to_string(Value, Width))
                 )
    return response == "OK"
def WriteMsr(Index, Value):
    response = UdkCommandHelper.sendUdkExtensionPacket("MSR%x=%x" % (Index, Value))
    if response != "OK":
        return False
    else:
        return True
def ReadIo(Address, Size):
    return UdkCommandHelper.string_to_long(
             UdkCommandHelper.sendUdkExtensionPacket("io%x,%x" % (Address, Size))
             );
Exemple #41
0
def Edk2StopHandler2(event):
    gdb.execute("refresharch")
    if not UdkCommandHelper.supportExpat():
        gdb.execute("loadthis")
    gdb.execute("info exception")