(self, fid)
| 1211 | |
| 1212 | # callback to be executed when any form control changed |
| 1213 | def OnFormChange(self, fid): |
| 1214 | # handle the search button |
| 1215 | if fid == -2: |
| 1216 | address = 0 |
| 1217 | addresses = [] |
| 1218 | while address != idc.BADADDR: |
| 1219 | address = idc.FindBinary(address, SEARCH_DOWN, self.GetControlValue(self.c_encoding)) |
| 1220 | if address == idc.BADADDR: |
| 1221 | break |
| 1222 | addresses.append([address]) |
| 1223 | address = address + 1 |
| 1224 | c = SearchResultChooser("Searching for [{0}]".format(self.GetControlValue(self.c_raw_assembly)), addresses) |
| 1225 | r = c.show() |
| 1226 | return 1 |
| 1227 | |
| 1228 | # only Search mode allows to select arch+mode |
| 1229 | arch_id = self.GetControlValue(self.c_arch) |
| 1230 | (arch, mode) = self.kp_asm.get_arch_by_idx(arch_id) |
| 1231 | |
| 1232 | # assembly is focused |
| 1233 | self.SetFocusedField(self.c_assembly) |
| 1234 | |
| 1235 | if arch == KS_ARCH_X86: |
| 1236 | # enable Syntax and disable Endian for x86 |
| 1237 | self.ShowField(self.c_syntax, True) |
| 1238 | self.EnableField(self.c_syntax, True) |
| 1239 | self.syntax_id = self.GetControlValue(self.c_syntax) |
| 1240 | self.EnableField(self.c_endian, False) |
| 1241 | # set Endian index properly |
| 1242 | self.SetControlValue(self.c_endian, 0) |
| 1243 | elif arch in (KS_ARCH_ARM64, KS_ARCH_HEXAGON, KS_ARCH_SYSTEMZ): |
| 1244 | # no Syntax & Endian option for these archs |
| 1245 | self.ShowField(self.c_syntax, False) |
| 1246 | self.EnableField(self.c_syntax, False) |
| 1247 | self.EnableField(self.c_endian, False) |
| 1248 | # set Endian index properly |
| 1249 | self.SetControlValue(self.c_endian, (mode & KS_MODE_BIG_ENDIAN != 0)) |
| 1250 | elif (arch == KS_ARCH_PPC) and (mode & KS_MODE_PPC32 != 0): |
| 1251 | # no Syntax & Endian option for these archs |
| 1252 | self.ShowField(self.c_syntax, False) |
| 1253 | self.EnableField(self.c_syntax, False) |
| 1254 | self.EnableField(self.c_endian, False) |
| 1255 | # set Endian index properly |
| 1256 | self.SetControlValue(self.c_endian, (mode & KS_MODE_BIG_ENDIAN != 0)) |
| 1257 | else: |
| 1258 | # no Syntax & Endian option |
| 1259 | self.ShowField(self.c_syntax, False) |
| 1260 | self.EnableField(self.c_syntax, False) |
| 1261 | self.EnableField(self.c_endian, True) |
| 1262 | |
| 1263 | if self.GetControlValue(self.c_endian) == 1: |
| 1264 | endian = KS_MODE_BIG_ENDIAN |
| 1265 | else: |
| 1266 | endian = KS_MODE_LITTLE_ENDIAN |
| 1267 | |
| 1268 | # update other controls & Encoding with live assembling |
| 1269 | self.update_controls(arch, mode) |
| 1270 |
nothing calls this directly
no test coverage detected