docs: def chunk_from_mem(self, ptr):
          """
          Given a pointer to a user payload, return the base of the chunk associated with that payload (i.e. the chunk
          pointer). Returns None if ptr is null.
  
          :param ptr: a pointer to the base of a user payload in the heap
          :returns: a pointer to the base of the associated heap chunk, or None if ptr is null
          """
          if self.state.solver.symbolic(ptr):
              try:
                  ptr = self.state.solver.eval_one(ptr)
              except SimSolverError:
                  l.warning("A pointer to a chunk is symbolic; maximizing it")
                  ptr = self.state.solver.max_int(ptr)
          else:
              ptr = self.state.solver.eval(ptr)
          return PTChunk(ptr - (2 * self._chunk_size_t_size), self.state) if ptr != 0 else None