.. | .. |
---|
66 | 66 | return container_of(ptr, gdb.lookup_type(typename.string()).pointer(), |
---|
67 | 67 | elementname.string()) |
---|
68 | 68 | |
---|
| 69 | + |
---|
69 | 70 | ContainerOf() |
---|
70 | 71 | |
---|
71 | 72 | |
---|
.. | .. |
---|
91 | 92 | return memoryview(inf.read_memory(start, length)) |
---|
92 | 93 | |
---|
93 | 94 | |
---|
94 | | -def read_u16(buffer): |
---|
| 95 | +def read_u16(buffer, offset): |
---|
| 96 | + buffer_val = buffer[offset:offset + 2] |
---|
95 | 97 | value = [0, 0] |
---|
96 | 98 | |
---|
97 | | - if type(buffer[0]) is str: |
---|
98 | | - value[0] = ord(buffer[0]) |
---|
99 | | - value[1] = ord(buffer[1]) |
---|
| 99 | + if type(buffer_val[0]) is str: |
---|
| 100 | + value[0] = ord(buffer_val[0]) |
---|
| 101 | + value[1] = ord(buffer_val[1]) |
---|
100 | 102 | else: |
---|
101 | | - value[0] = buffer[0] |
---|
102 | | - value[1] = buffer[1] |
---|
| 103 | + value[0] = buffer_val[0] |
---|
| 104 | + value[1] = buffer_val[1] |
---|
103 | 105 | |
---|
104 | 106 | if get_target_endianness() == LITTLE_ENDIAN: |
---|
105 | 107 | return value[0] + (value[1] << 8) |
---|
.. | .. |
---|
107 | 109 | return value[1] + (value[0] << 8) |
---|
108 | 110 | |
---|
109 | 111 | |
---|
110 | | -def read_u32(buffer): |
---|
| 112 | +def read_u32(buffer, offset): |
---|
111 | 113 | if get_target_endianness() == LITTLE_ENDIAN: |
---|
112 | | - return read_u16(buffer[0:2]) + (read_u16(buffer[2:4]) << 16) |
---|
| 114 | + return read_u16(buffer, offset) + (read_u16(buffer, offset + 2) << 16) |
---|
113 | 115 | else: |
---|
114 | | - return read_u16(buffer[2:4]) + (read_u16(buffer[0:2]) << 16) |
---|
| 116 | + return read_u16(buffer, offset + 2) + (read_u16(buffer, offset) << 16) |
---|
115 | 117 | |
---|
116 | 118 | |
---|
117 | | -def read_u64(buffer): |
---|
| 119 | +def read_u64(buffer, offset): |
---|
118 | 120 | if get_target_endianness() == LITTLE_ENDIAN: |
---|
119 | | - return read_u32(buffer[0:4]) + (read_u32(buffer[4:8]) << 32) |
---|
| 121 | + return read_u32(buffer, offset) + (read_u32(buffer, offset + 4) << 32) |
---|
120 | 122 | else: |
---|
121 | | - return read_u32(buffer[4:8]) + (read_u32(buffer[0:4]) << 32) |
---|
| 123 | + return read_u32(buffer, offset + 4) + (read_u32(buffer, offset) << 32) |
---|
| 124 | + |
---|
| 125 | + |
---|
| 126 | +def read_ulong(buffer, offset): |
---|
| 127 | + if get_long_type().sizeof == 8: |
---|
| 128 | + return read_u64(buffer, offset) |
---|
| 129 | + else: |
---|
| 130 | + return read_u32(buffer, offset) |
---|
122 | 131 | |
---|
123 | 132 | |
---|
124 | 133 | target_arch = None |
---|
.. | .. |
---|
148 | 157 | def probe_qemu(): |
---|
149 | 158 | try: |
---|
150 | 159 | return gdb.execute("monitor info version", to_string=True) != "" |
---|
151 | | - except: |
---|
| 160 | + except gdb.error: |
---|
152 | 161 | return False |
---|
153 | 162 | |
---|
154 | 163 | def probe_kgdb(): |
---|
155 | 164 | try: |
---|
156 | 165 | thread_info = gdb.execute("info thread 2", to_string=True) |
---|
157 | 166 | return "shadowCPU0" in thread_info |
---|
158 | | - except: |
---|
| 167 | + except gdb.error: |
---|
159 | 168 | return False |
---|
160 | 169 | |
---|
161 | 170 | global gdbserver_type |
---|
.. | .. |
---|
172 | 181 | def gdb_eval_or_none(expresssion): |
---|
173 | 182 | try: |
---|
174 | 183 | return gdb.parse_and_eval(expresssion) |
---|
175 | | - except: |
---|
| 184 | + except gdb.error: |
---|
176 | 185 | return None |
---|
177 | 186 | |
---|
178 | 187 | |
---|