'Get an arbitrary CFGNode (without considering their contexts) from our graph.
:param int addr:        Address of the beginning of the basic block. Set anyaddr to True to support arbitrary
address.
:param bool is_syscall: Whether you want to get the syscall node or any other node. This is due to the fact that
syscall SimProcedures have the same address as the targer it returns to.
None means get either, True means get a syscall node, False means get something that isn\'t
a syscall node.
:param bool anyaddr:    If anyaddr is True, then addr doesn\'t have to be the beginning address of a basic
block. By default the entire graph.nodes() will be iterated, and the first node
containing the specific address is returned, which is slow. If you need to do many such
queries, you may first call `generate_index()` to create some indices that may speed up the
query.
:return: A CFGNode if there is any that satisfies given conditions, or None otherwise'

def get_any_node(self, addr, is_syscall=None, anyaddr=False):

    if ((not anyaddr) and self._nodes_by_addr and (addr in self._nodes_by_addr) and self._nodes_by_addr[addr]):
        return self._nodes_by_addr[addr][0]
    for n in self.graph.nodes_iter():
        cond = (n.looping_times == 0)
        if (anyaddr and (n.size is not None)):
            cond = (cond and ((addr >= n.addr) and (addr < (n.addr + n.size))))
        else:
            cond = (cond and (addr == n.addr))
        if cond:
            if (is_syscall is None):
                return n
            if (n.is_syscall == is_syscall):
                return n
    return None
