@efffrida/ vitest- 池
一个在Frida代理中运行测试文件的 vitest 池,所以在 目标进程而不是节点.
示例用途
import { createFridaPool } from "@efffrida/vitest-pool";
import { defineConfig } from "vitest/config";
export default defineConfig({
test: {
include: ["test/**/*.test.ts"],
pool: createFridaPool({
device: { connection: "local" },
attach: { spawn: ["/usr/bin/sleep", "infinity"] },
}),
},
});
每个工人都会给一个临时的 .vitest-frida-pool-* 目录
在工程根下,用frida的编译器编译,并装入
附加会议。 工人初始化是序列化的,所以只有一个代理
一次编译并附上.
虚拟补丁
代理人进口了vitest的试验跑道(startTests 财务报告和审定财务报表 collectTests 从
vitest/internal/browser)),生活在该区 vitest/dist/chunks/run.BPv-BBRv.js。 。 。 .
那块块里面有正版 /\$([$\p{ID_Continue}.]+)/gu 用于内插
test.each 而Frida的JS运行时间 无法解析unicode财产逃脱
(见 frida/frida-gum # 1195),这样
加载代理失败的语法错误 .
patches/[email protected] 替换它
与 /\$([$\w.]+)/g。唯一的行为改变是 $name 插入内插
test.each 标题只匹配 ascii 标识符.
补丁针对一个内容散列块名, 因此必须重生成
每当vitest被撞出,即使regex本身没有变化. 运行 pnpm patch vitest@<version>中,将相同的修改应用到任何 run.*.js 块
包含正则ex,然后 pnpm patch-commit 更新 patchedDependencies 内
pnpm-workspace.yaml。在此存储库外使用池需要的项目
以应用同一补丁.