| 1020 | # Fill Range form |
| 1021 | class Keypatch_FillRange(Keypatch_Form): |
| 1022 | def __init__(self, kp_asm, addr_begin, addr_end, assembly=None, opts=None): |
| 1023 | self.setup(kp_asm, addr_begin, assembly) |
| 1024 | self.addr_end = addr_end |
| 1025 | |
| 1026 | # create FillRange form |
| 1027 | Form.__init__(self, |
| 1028 | r"""STARTITEM {id:c_assembly} |
| 1029 | BUTTON YES* Patch |
| 1030 | KEYPATCH:: Fill Range |
| 1031 | |
| 1032 | {FormChangeCb} |
| 1033 | <Endian :{c_endian}> |
| 1034 | <~S~yntax :{c_syntax}> |
| 1035 | <Start :{c_addr}> |
| 1036 | <End :{c_addr_end}> |
| 1037 | <Size :{c_size}> |
| 1038 | <~A~ssembly :{c_assembly}> |
| 1039 | <- Fixup :{c_raw_assembly}> |
| 1040 | <- Encode:{c_encoding}> |
| 1041 | <- Size :{c_encoding_len}> |
| 1042 | <~N~OPs padding until next instruction boundary:{c_opt_padding}> |
| 1043 | <Save ~o~riginal instructions in IDA comment:{c_opt_comment}>{c_opt_chk}> |
| 1044 | """, { |
| 1045 | 'c_endian': Form.DropdownListControl( |
| 1046 | items = self.kp_asm.endian_lists.keys(), |
| 1047 | readonly = True, |
| 1048 | selval = self.endian_id), |
| 1049 | 'c_addr': Form.NumericInput(value=addr_begin, swidth=MAX_ADDRESS_LEN, tp=Form.FT_ADDR), |
| 1050 | 'c_addr_end': Form.NumericInput(value=addr_end - 1, swidth=MAX_ADDRESS_LEN, tp=Form.FT_ADDR), |
| 1051 | 'c_assembly': Form.StringInput(value=self.asm[:MAX_INSTRUCTION_STRLEN], width=MAX_INSTRUCTION_STRLEN), |
| 1052 | 'c_size': Form.NumericInput(value=addr_end - addr_begin, swidth=8, tp=Form.FT_DEC), |
| 1053 | 'c_raw_assembly': Form.StringInput(value='', width=MAX_INSTRUCTION_STRLEN), |
| 1054 | 'c_encoding': Form.StringInput(value='', width=MAX_ENCODING_LEN), |
| 1055 | 'c_encoding_len': Form.NumericInput(value=0, swidth=8, tp=Form.FT_DEC), |
| 1056 | 'c_syntax': Form.DropdownListControl( |
| 1057 | items = self.syntax_keys, |
| 1058 | readonly = True, |
| 1059 | selval = self.syntax_id), |
| 1060 | 'c_opt_chk':idaapi.Form.ChkGroupControl(('c_opt_padding', 'c_opt_comment', ''), value=opts['c_opt_chk']), |
| 1061 | 'FormChangeCb': Form.FormChangeCb(self.OnFormChange), |
| 1062 | }) |
| 1063 | |
| 1064 | self.Compile() |
| 1065 | |
| 1066 | # callback to be executed when any form control changed |
| 1067 | def OnFormChange(self, fid): |