package org.tzd.frida.windows;

/**
 * FridaNative 类封装了与本地 Frida 库的交互方法。
 * <p>该类提供了几个静态本地方法，用于将 JavaScript 代码注入到目标进程并进行管理。</p>
 * <p>所有方法都通过 JNI 调用本地代码实现与 Frida 库的交互。</p>
 */
public class FridaNative {

    /**
     * 使用 Frida 将 JavaScript 代码注入到指定进程。
     *
     * <p>该方法通过 JNI 调用本地 Frida 函数，将 JavaScript 代码注入到指定的进程中。</p>
     *
     * @param pid 目标进程的 PID，通常是目标程序的进程 ID（例如，QQ 进程）。
     * @param jsCode 要注入的 JavaScript 代码字符串。
     * @return 返回注入是否成功，成功返回 `true`，失败返回 `false`。
     */
    native static boolean injection(long pid, String jsCode);

    /**
     * 更新 Frida 的状态，保持与注入进程的交互。
     * <p>此方法调用本地 Frida 函数以保持与注入的进程进行通信和交互。</p>
     *
     * @return 返回更新是否成功，成功返回 `true`，失败返回 `false`。
     */
    native static boolean update();

    /**
     * 判断 Frida 是否正在运行。
     * <p>此方法用于检查 Frida 是否正在执行并保持与目标进程的交互。</p>
     *
     * @return 如果 Frida 正在运行，返回 `true`，否则返回 `false`。
     */
    native static boolean isRunning();

    /**
     * 释放 Frida 的资源。
     * <p>该方法调用本地函数释放与 Frida 进程的所有资源。</p>
     *
     * @return 如果资源释放成功，返回 `true`，否则返回 `false`。
     */
    native static boolean release();

    /**
     * 从消息中提取指定的字符串成员。
     * <p>该方法通过 JNI 调用本地函数获取消息中的指定成员，并返回其字符串值。</p>
     *
     * @param message 输入的消息字符串，通常是 Frida 的 JSON 格式的响应消息。
     * @param member 要获取的成员名称。
     * @return 返回指定成员的字符串值。
     */
    native static String getStringMember(String message, String member);
}
