private static HookPage handleHookPage(ArtMethod original, ArtMethod replacement) { long originalEntryPoint = INSTRUCTION_SET_HELPER.toMem(original.getEntryPointFromQuickCompiledCode()); if (!pages.containsKey(originalEntryPoint)) { pages.put( originalEntryPoint, new HookPage( INSTRUCTION_SET_HELPER, originalEntryPoint, getQuickCompiledCodeSize(original))); } HookPage page = pages.get(originalEntryPoint); page.addHook(new HookPage.Hook(original, replacement)); page.update(); return page; }
private static int getQuickCompiledCodeSize(ArtMethod method) { long entryPoint = INSTRUCTION_SET_HELPER.toMem(method.getEntryPointFromQuickCompiledCode()); long sizeInfo1 = entryPoint - 4; byte[] bytes = Memory.get(sizeInfo1, 4); return ByteBuffer.wrap(bytes).order(ByteOrder.LITTLE_ENDIAN).getInt(); }