Esempio n. 1
0
    def goto_referring_address(self, acting_client):
        current_address = self.get_address(acting_client)
        if current_address is None:
            return ERRMSG_NO_IDENTIFIABLE_DESTINATION

        addresses = list(disassembly.get_referring_addresses(self.disassembly_data, current_address))
        if not len(addresses):
            return ERRMSG_NO_IDENTIFIABLE_DESTINATION

        # Addresses appear in numerical order.
        addresses.sort()
        # Symbols appear in place of addresses where they exist.
        converted_addresses = addresses[:]
        self._convert_addresses_to_symbols_where_possible(converted_addresses)
        address_rows = []
        for i, address in enumerate(addresses):
            code_string = self.get_source_code_for_address(acting_client, address)
            address_rows.append((self._address_to_string(address), converted_addresses[i], code_string))

        selected_address = acting_client.request_address_selection(TEXT_SELECT_REFERRING_ADDRESS_SHORT, TEXT_SELECT_REFERRING_ADDRESS_LONG, TEXT_GO_TO_SELECTION, address_rows, addresses)
        if selected_address is None:
            return False

        next_line_number = disassembly.get_line_number_for_address(self.disassembly_data, selected_address)
        if next_line_number is None:
            return ERRMSG_BUG_UNABLE_TO_GOTO_LINE

        self.set_line_number(acting_client, next_line_number)
        self.address_stack.append(current_address)
        return True
Esempio n. 2
0
 def get_referring_addresses_for_address(self, acting_client, address):
     return list(disassembly.get_referring_addresses(self.disassembly_data, address))