private void findLabels(byte[] insns, BitSet nextBit, BitSet badOps, Map<Integer, DexLabel> labelsMap, Set<Integer> handlers, Method method) { Queue<Integer> q = new LinkedList<Integer>(); q.add(0); q.addAll(handlers); handlers.clear(); while (!q.isEmpty()) { int offset = q.poll(); if (nextBit.get(offset)) { continue; } else { nextBit.set(offset); } try { travelInsn(labelsMap, q, insns, offset); } catch (IndexOutOfBoundsException indexOutOfRange){ badOps.set(offset); WARN("GLITCH: %04x %s | not enough space for reading instruction", offset, method.toString()); } catch (BadOpException badOp){ badOps.set(offset); WARN("GLITCH: %04x %s | %s", offset, method.toString(), badOp.getMessage()); } } }
private void findLabels(byte[] insns, BitSet nextBit, BitSet badOps, Map<Integer, DexLabel> labelsMap, Set<Integer> handlers, Method method) { Queue<Integer> q = new LinkedList<Integer>(); q.add(0); q.addAll(handlers); handlers.clear(); while (!q.isEmpty()) { int offset = q.poll(); if (nextBit.get(offset)) { continue; } else { nextBit.set(offset); } try { travelInsn(labelsMap, q, insns, offset); } catch (IndexOutOfBoundsException indexOutOfRange){ badOps.set(offset); WARN("GLITCH: %04x %s | not enough space for reading instruction", offset, method.toString()); } catch (BadOpException badOp){ badOps.set(offset); WARN("GLITCH: %04x %s | %s", offset, method.toString(), badOp.getMessage()); } } }