MCPcopy Index your code
hub / github.com/keystone-engine/keypatch / OnFormChange

Method OnFormChange

keypatch.py:1213–1271  ·  view source on GitHub ↗
(self, fid)

Source from the content-addressed store, hash-verified

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

Callers

nothing calls this directly

Calls 4

showMethod · 0.95
SearchResultChooserClass · 0.85
get_arch_by_idxMethod · 0.80
update_controlsMethod · 0.80

Tested by

no test coverage detected