code: def get_label_at_address(self, address, offset = None):
          
  
          # Add the offset to the address.
          if offset:
              address = address + offset
  
          # Make the label relative to the base address if no match is found.
          module      = self.get_name()
          function    = None
          offset      = address - self.get_base()
  
          # Make the label relative to the entrypoint if no other match is found.
          # Skip if the entry point is unknown.
          start = self.get_entry_point()
          if start and start <= address:
              function    = "start"
              offset      = address - start
  
          # Enumerate exported functions and debug symbols,
          # then find the closest match, if possible.
          try:
              symbol = self.get_symbol_at_address(address)
              if symbol:
                  (SymbolName, SymbolAddress, SymbolSize) = symbol
                  new_offset = address - SymbolAddress
                  if new_offset <= offset:
                      function    = SymbolName
                      offset      = new_offset
          except WindowsError:
              pass
  
          # Parse the label and return it.
          return _ModuleContainer.parse_label(module, function, offset)
docs: Creates a label from the given memory address.
  
          If the address belongs to the module, the label is made relative to
          it's base address.
  
          @type  address: int
          @param address: Memory address.
  
          @type  offset: None or int
          @param offset: (Optional) Offset value.
  
          @rtype:  str
          @return: Label pointing to the given address.