| OLD | NEW |
| 1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
| 2 # | 2 # |
| 3 # Copyright 2012 the V8 project authors. All rights reserved. | 3 # Copyright 2012 the V8 project authors. All rights reserved. |
| 4 # Redistribution and use in source and binary forms, with or without | 4 # Redistribution and use in source and binary forms, with or without |
| 5 # modification, are permitted provided that the following conditions are | 5 # modification, are permitted provided that the following conditions are |
| 6 # met: | 6 # met: |
| 7 # | 7 # |
| 8 # * Redistributions of source code must retain the above copyright | 8 # * Redistributions of source code must retain the above copyright |
| 9 # notice, this list of conditions and the following disclaimer. | 9 # notice, this list of conditions and the following disclaimer. |
| 10 # * Redistributions in binary form must reproduce the above | 10 # * Redistributions in binary form must reproduce the above |
| (...skipping 2018 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2029 def do_sh(self, none): | 2029 def do_sh(self, none): |
| 2030 """ | 2030 """ |
| 2031 Search for the V8 Heap object in all available memory regions. You | 2031 Search for the V8 Heap object in all available memory regions. You |
| 2032 might get lucky and find this rare treasure full of invaluable | 2032 might get lucky and find this rare treasure full of invaluable |
| 2033 information. | 2033 information. |
| 2034 """ | 2034 """ |
| 2035 raise NotImplementedError | 2035 raise NotImplementedError |
| 2036 | 2036 |
| 2037 def do_u(self, args): | 2037 def do_u(self, args): |
| 2038 """ | 2038 """ |
| 2039 u 0x<address> 0x<size> | 2039 Unassemble memory in the region [address, address + size). If the |
| 2040 Unassemble memory in the region [address, address + size) | 2040 size is not specified, a default value of 32 bytes is used. |
| 2041 Synopsis: u 0x<address> 0x<size> |
| 2041 """ | 2042 """ |
| 2042 args = args.split(' ') | 2043 args = args.split(' ') |
| 2043 start = int(args[0], 16) | 2044 start = int(args[0], 16) |
| 2044 size = int(args[1], 16) | 2045 size = int(args[1], 16) if len(args) > 1 else 0x20 |
| 2046 if not self.reader.IsValidAddress(start): |
| 2047 print "Address is not contained within the minidump!" |
| 2048 return |
| 2045 lines = self.reader.GetDisasmLines(start, size) | 2049 lines = self.reader.GetDisasmLines(start, size) |
| 2046 for line in lines: | 2050 for line in lines: |
| 2047 print FormatDisasmLine(start, self.heap, line) | 2051 print FormatDisasmLine(start, self.heap, line) |
| 2048 print | 2052 print |
| 2049 | 2053 |
| 2054 def do_EOF(self, none): |
| 2055 raise KeyboardInterrupt |
| 2056 |
| 2050 EIP_PROXIMITY = 64 | 2057 EIP_PROXIMITY = 64 |
| 2051 | 2058 |
| 2052 CONTEXT_FOR_ARCH = { | 2059 CONTEXT_FOR_ARCH = { |
| 2053 MD_CPU_ARCHITECTURE_AMD64: | 2060 MD_CPU_ARCHITECTURE_AMD64: |
| 2054 ['rax', 'rbx', 'rcx', 'rdx', 'rdi', 'rsi', 'rbp', 'rsp', 'rip', | 2061 ['rax', 'rbx', 'rcx', 'rdx', 'rdi', 'rsi', 'rbp', 'rsp', 'rip', |
| 2055 'r8', 'r9', 'r10', 'r11', 'r12', 'r13', 'r14', 'r15'], | 2062 'r8', 'r9', 'r10', 'r11', 'r12', 'r13', 'r14', 'r15'], |
| 2056 MD_CPU_ARCHITECTURE_ARM: | 2063 MD_CPU_ARCHITECTURE_ARM: |
| 2057 ['r0', 'r1', 'r2', 'r3', 'r4', 'r5', 'r6', 'r7', 'r8', 'r9', | 2064 ['r0', 'r1', 'r2', 'r3', 'r4', 'r5', 'r6', 'r7', 'r8', 'r9', |
| 2058 'r10', 'r11', 'r12', 'sp', 'lr', 'pc'], | 2065 'r10', 'r11', 'r12', 'sp', 'lr', 'pc'], |
| 2059 MD_CPU_ARCHITECTURE_X86: | 2066 MD_CPU_ARCHITECTURE_X86: |
| (...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2124 print FormatDisasmLine(disasm_start, heap, line) | 2131 print FormatDisasmLine(disasm_start, heap, line) |
| 2125 print | 2132 print |
| 2126 | 2133 |
| 2127 if heap is None: | 2134 if heap is None: |
| 2128 heap = V8Heap(reader, None) | 2135 heap = V8Heap(reader, None) |
| 2129 | 2136 |
| 2130 if options.full: | 2137 if options.full: |
| 2131 FullDump(reader, heap) | 2138 FullDump(reader, heap) |
| 2132 | 2139 |
| 2133 if options.shell: | 2140 if options.shell: |
| 2134 InspectionShell(reader, heap).cmdloop("type help to get help") | 2141 try: |
| 2142 InspectionShell(reader, heap).cmdloop("type help to get help") |
| 2143 except KeyboardInterrupt: |
| 2144 print "Kthxbye." |
| 2135 else: | 2145 else: |
| 2136 if reader.exception is not None: | 2146 if reader.exception is not None: |
| 2137 print "Annotated stack (from exception.esp to bottom):" | 2147 print "Annotated stack (from exception.esp to bottom):" |
| 2138 for slot in xrange(stack_top, stack_bottom, reader.PointerSize()): | 2148 for slot in xrange(stack_top, stack_bottom, reader.PointerSize()): |
| 2139 maybe_address = reader.ReadUIntPtr(slot) | 2149 maybe_address = reader.ReadUIntPtr(slot) |
| 2140 heap_object = heap.FindObject(maybe_address) | 2150 heap_object = heap.FindObject(maybe_address) |
| 2141 maybe_symbol = reader.FindSymbol(maybe_address) | 2151 maybe_symbol = reader.FindSymbol(maybe_address) |
| 2142 print "%s: %s %s" % (reader.FormatIntPtr(slot), | 2152 print "%s: %s %s" % (reader.FormatIntPtr(slot), |
| 2143 reader.FormatIntPtr(maybe_address), | 2153 reader.FormatIntPtr(maybe_address), |
| 2144 maybe_symbol or "") | 2154 maybe_symbol or "") |
| (...skipping 18 matching lines...) Expand all Loading... |
| 2163 options, args = parser.parse_args() | 2173 options, args = parser.parse_args() |
| 2164 if os.path.exists(options.objdump): | 2174 if os.path.exists(options.objdump): |
| 2165 disasm.OBJDUMP_BIN = options.objdump | 2175 disasm.OBJDUMP_BIN = options.objdump |
| 2166 OBJDUMP_BIN = options.objdump | 2176 OBJDUMP_BIN = options.objdump |
| 2167 else: | 2177 else: |
| 2168 print "Cannot find %s, falling back to default objdump" % options.objdump | 2178 print "Cannot find %s, falling back to default objdump" % options.objdump |
| 2169 if len(args) != 1: | 2179 if len(args) != 1: |
| 2170 parser.print_help() | 2180 parser.print_help() |
| 2171 sys.exit(1) | 2181 sys.exit(1) |
| 2172 AnalyzeMinidump(options, args[0]) | 2182 AnalyzeMinidump(options, args[0]) |
| OLD | NEW |