コード例 #1
0
    def _search_text(self, acting_client, direction, work_state=None):
        # Start after the current line.
        line_number = self.get_line_number(acting_client) + direction
        line_count = self.get_line_count(acting_client)
        result_lower_case = self.last_search_text.lower()
        while line_number >= 0 and line_number < line_count and not work_state.is_cancelled():
            text = disassembly.get_file_line(self.disassembly_data, line_number, disassembly.LI_LABEL)
            text += " "+ disassembly.get_file_line(self.disassembly_data, line_number, disassembly.LI_INSTRUCTION)
            text += " "+ disassembly.get_file_line(self.disassembly_data, line_number, disassembly.LI_OPERANDS)
            if disassembly.DEBUG_ANNOTATE_DISASSEMBLY:
                text += " "+ disassembly.get_file_line(self.disassembly_data, line_number, disassembly.LI_ANNOTATIONS)

            if result_lower_case in text.lower():
                break
            line_number += direction
            if direction == 1:
                work_state.set_completeness(line_number / float(line_count))
            else:
                work_state.set_completeness((line_count - line_number) / float(line_count))
            work_state.set_description("Line %d" % line_number)
        else:
            return ERRMSG_NO_IDENTIFIABLE_DESTINATION
        # We broke out on a match.
        if not work_state.is_cancelled():
            return line_number
コード例 #2
0
 def get_row_for_line_number(self, acting_client, line_idx):
     return [
         disassembly.get_file_line(self.disassembly_data, line_idx, disassembly.LI_OFFSET),
         disassembly.get_file_line(self.disassembly_data, line_idx, disassembly.LI_BYTES),
         disassembly.get_file_line(self.disassembly_data, line_idx, disassembly.LI_LABEL),
         disassembly.get_file_line(self.disassembly_data, line_idx, disassembly.LI_INSTRUCTION),
         disassembly.get_file_line(self.disassembly_data, line_idx, disassembly.LI_OPERANDS),
     ]
コード例 #3
0
    def export_source_code(self, acting_client):
        if self.state_id != EditorState.STATE_LOADED:
            return ERRMSG_TODO_BAD_STATE_FUNCTIONALITY

        line_count = disassembly.get_file_line_count(self.disassembly_data)

        # Prompt for save file name.
        save_file = acting_client.request_code_save_file()
        if save_file is not None:
            for i in xrange(line_count):
                label_text = disassembly.get_file_line(self.disassembly_data, i, disassembly.LI_LABEL)
                instruction_text = disassembly.get_file_line(self.disassembly_data, i, disassembly.LI_INSTRUCTION)
                operands_text = disassembly.get_file_line(self.disassembly_data, i, disassembly.LI_OPERANDS)
                if label_text:
                    save_file.write(label_text)
                if instruction_text or operands_text:
                    save_file.write("\t")
                    save_file.write(instruction_text)
                if operands_text:
                    save_file.write("\t")
                    save_file.write(operands_text)
                save_file.write("\n")
            save_file.close()
コード例 #4
0
 def get_file_line(self, acting_client, row, column):
     if self.disassembly_data is None:
         return ""
     return disassembly.get_file_line(self.disassembly_data, row, column)
コード例 #5
0
 def get_source_code_for_line_number(self, acting_client, line_idx):
     code_string = disassembly.get_file_line(self.disassembly_data, line_idx, disassembly.LI_INSTRUCTION)
     operands_text = disassembly.get_file_line(self.disassembly_data, line_idx, disassembly.LI_OPERANDS)
     if len(operands_text):
         code_string += " "+ operands_text
     return code_string