def __init__(self, ioctl, driver): idaapi.Form.__init__( self, """Send IOCTL {form_change} <#Input Buffer#~I~nput Buffer:{in_buf}> <#Input Buffer Size#~I~nput Buffer Size:{in_size}> <#Output Buffer#~O~utput Buffer:{out_buf}> <#Output Buffer Size#~O~utput Buffer Size:{out_size}> <#Send IOCTL#~S~end IOCTL:{sendIOCTL}> """, { "form_change": idaapi.Form.FormChangeCb(self.form_change), "in_buf": idaapi.Form.MultiLineTextControl(), "out_buf": idaapi.Form.MultiLineTextControl(), "in_size": idaapi.Form.NumericInput(), "out_size": idaapi.Form.NumericInput(), "sendIOCTL": idaapi.Form.ButtonInput(self.send_ioctl) }) self.driver = driver global ioctl_tracker for inst in ioctl_tracker.ioctl_locs: value = get_operand_value(inst) function = ioctl_decoder.get_function(value) if function == int(ioctl[1], 16): self.ioctl = value self.Compile() self.in_size.value = 0x20 self.out_size.value = 0x20 self.in_buf.value = "\\x41" * 0x20 self.Execute()
def get_all_defines(): """Returns the C defines for all ICOTL codes which have been marked during the current session""" global ioctl_tracker defines = [] for inst in ioctl_tracker.ioctl_locs: value = get_operand_value(inst) function = ioctl_decoder.get_function(value) device_name, device_code = ioctl_decoder.get_device(value) method_name, method_code = ioctl_decoder.get_method(value) access_name, access_code = ioctl_decoder.get_access(value) define = ioctl_decoder.get_define(value) defines.append(["0x%X" % (inst,), "0x%X" % (function,), "%s (0x%X)" % (device_name, device_code), "%s (0x%X)" % (method_name, method_code), "%s (0x%X)" % (access_name, access_code), define]) return defines