chore: 改名同步 TransPyV -> ViperC(源码/配置内的纯替换)
This commit is contained in:
1 parent
8857407ffc
commit
ca3d723640
3 files changed
+24
-24
No files matched your search
@@ -1 +1 @@
|
||||
[{"id":"80265108-c9b5-4d99-a28b-74031104ffe3","executable":"D:\\Users\\TermiNexus\\Desktop\\TransPyC\\TransPyV\\output\\TransPyV.exe","version":"0.0.3-dev.428","arch":"x86_64","source":"workspace","displayName":"Viper 0.0.3-dev.428"}]
|
||||
[{"id":"80265108-c9b5-4d99-a28b-74031104ffe3","executable":"D:\\Users\\TermiNexus\\Desktop\\TransPyC\\ViperC\\output\\viperc.exe","version":"0.0.3-dev.428","arch":"x86_64","source":"workspace","displayName":"Viper 0.0.3-dev.428"}]
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
它有两种模式:
|
||||
|
||||
- **`ver <exe>`**:对给定的 Windows PE 可执行文件做三项静态/动态校验,确认该产物确实由 TransPyV 工具链生成、且自报版本正确。
|
||||
- **`ver <exe>`**:对给定的 Windows PE 可执行文件做三项静态/动态校验,确认该产物确实由 ViperC 工具链生成、且自报版本正确。
|
||||
- **`scan --cache <path>`**:**常驻扫盘发现器**——默认每 10 秒一轮(可用 `--sleep <毫秒>` 改),遍历"常用目录表",递归查找所有同时满足"可解析 PE 且含 `.PRVERSN` 段且 `<exe> --version` 输出以 `Viper` 开头"的 exe,把结果以 JSON 数组写到 **stdout**,并把发现记录写入 JSON 缓存文件。目录表默认自动构建,也可用可重复的 `--path <dir>` **强制替换**;扫盘过程日志(进度行、扫描根进出、逐条过滤诊断、目录表清单等,含被处理路径)默认**静默**,仅在 `--verbose` 时写到 **stderr**;可用 `--need-confirm <秒>` 开启**心跳确认**——由**独立的看门狗子进程**(`VET.exe confirm-watch …`,内部隐藏命令)每 x 秒要求 stdin 输入一行 `{"ok": 1}`,**期限(默认 5000 ms,可用 `--need-confirm-timeout <毫秒>` 改)到点仍未收到合法 `{"ok": 1}`、或收到形状合法但取值不是 `1` 的行**(如 `{"ok": 0}`)即输出 `{"exit":1, "msg": "timeout/ok!=1"}` 并终止 scan 进程;**形状可疑的行**(去掉前导空白后首字符不是 `{` / 整行不含 `}` / 行长超过 256 字节,**含空行**)被忽略并继续在剩余期限内等待,不判失败。
|
||||
- **`--need-confirm` 开启时另有一条 `check` 请求通道**(依附心跳,见「check 请求通道」):往 stdin 写一行 `{"check": "<exe 绝对路径>", "id": <整数>}`,看门狗把它转发给 scan 进程,scan **优先**完成"读 `.PRVERSN` → 执行 `--version` 验证",并把结果以**单行 JSON** 回执写到 stdout。该行不参与心跳判定(期限继续走,仍需照常回 `{"ok": 1}`)。
|
||||
- **`scan --search-paths`**:**查询开关**(无值)——建好"会搜索的目录表"后**逐行打印**(序号 + 路径 + 目录表来源,输出到 **stderr**)并**直接退出**:不扫盘、不拉起看门狗、不读写缓存,因此**未给 `--cache` 也可运行**(见下文「查询开关 `--search-paths`」)。
|
||||
@@ -85,16 +85,16 @@ VET.exe scan --cache <缓存 JSON 路径> --need-confirm 3 --need-confirm-timeou
|
||||
# 确保 PATH 含 mingw 与 LLVM
|
||||
$env:PATH = "D:\msys64\mingw64\bin;D:\LLVM\bin;$env:PATH"
|
||||
|
||||
# 用 Viper 自举的前端 TransPyV(识别 project.vpj 的 build_dir)
|
||||
D:\Users\TermiNexus\Desktop\TransPyC\exe\TransPyV.exe `
|
||||
# 用 Viper 自举的前端 ViperC(识别 project.vpj 的 build_dir)
|
||||
D:\Users\TermiNexus\Desktop\TransPyC\exe\viperc.exe `
|
||||
--project .\project.vpj
|
||||
```
|
||||
|
||||
产物位于 `VET\.tpv_build\output\VET.exe`(`build_dir` = `./.tpv_build`,`linker.output` = `VET.exe`)。
|
||||
产物位于 `VET\__vpcbuild__\output\VET.exe`(`build_dir` = `./__vpcbuild__`,`linker.output` = `VET.exe`)。
|
||||
|
||||
> 本次把单文件 `App/main.vp` 拆成 `App/main.vp` + `App/lib/*.vp`(新增 11 个源文件)。
|
||||
> 仓库内 `.tpv_build/temp` 可能残留旧单文件构建的中间产物;首次重建建议清缓存:
|
||||
> `TransPyV.exe --project .\project.vpj --clear-cache`(或直接删除 `VET\.tpv_build`)。
|
||||
> 仓库内 `__vpcbuild__/temp` 可能残留旧单文件构建的中间产物;首次重建建议清缓存:
|
||||
> `viperc.exe --project .\project.vpj --clear-cache`(或直接删除 `VET\__vpcbuild__`)。
|
||||
> 多文件项目由 `source_dir`(`./App`)**递归**收集 `.vp/.py`,子目录 `lib/` 会自动纳入。
|
||||
|
||||
> 也可用 Python 前端:`python ..\TransPyC\Projectrans.py --project .\project.vpj`,
|
||||
@@ -105,29 +105,29 @@ D:\Users\TermiNexus\Desktop\TransPyC\exe\TransPyV.exe `
|
||||
|
||||
```powershell
|
||||
# 单 exe 校验(日志在 stderr)
|
||||
.\.tpv_build\output\VET.exe ver ..\exe\TransPyV.exe
|
||||
.\__vpcbuild__\output\VET.exe ver ..\exe\viperc.exe
|
||||
|
||||
# 扫盘:只跑一轮验证;stdout 重定向到文件即得到 JSON
|
||||
.\.tpv_build\output\VET.exe scan --cache .\vet_cache.json --once > result.json
|
||||
.\__vpcbuild__\output\VET.exe scan --cache .\vet_cache.json --once > result.json
|
||||
|
||||
# 扫盘:仅扫两个指定目录(强制替换目录表;不做任何自动建表)
|
||||
.\.tpv_build\output\VET.exe scan --cache .\vet_cache.json --once --path .\App --path D:\Viper > result.json
|
||||
.\__vpcbuild__\output\VET.exe scan --cache .\vet_cache.json --once --path .\App --path D:\Viper > result.json
|
||||
|
||||
# 查询将搜索的路径(建表后逐行打印到 stderr 即退出;不需要 --cache,也不扫盘)
|
||||
.\.tpv_build\output\VET.exe scan --search-paths 2>&1 | Tee-Object .\search.log
|
||||
.\__vpcbuild__\output\VET.exe scan --search-paths 2>&1 | Tee-Object .\search.log
|
||||
|
||||
# 查询覆盖表:只看这两个目录(不存在的会告警并跳过)
|
||||
.\.tpv_build\output\VET.exe scan --search-paths --path D:\X --path D:\Y
|
||||
.\__vpcbuild__\output\VET.exe scan --search-paths --path D:\X --path D:\Y
|
||||
|
||||
# 常驻扫盘(每 10 秒一轮,Ctrl+C 退出)
|
||||
.\.tpv_build\output\VET.exe scan --cache .\vet_cache.json
|
||||
.\__vpcbuild__\output\VET.exe scan --cache .\vet_cache.json
|
||||
|
||||
# 扫盘:轮间隔改为 1 秒(--sleep 1000)
|
||||
.\.tpv_build\output\VET.exe scan --cache .\vet_cache.json --sleep 1000
|
||||
.\__vpcbuild__\output\VET.exe scan --cache .\vet_cache.json --sleep 1000
|
||||
|
||||
# 心跳确认:看门狗子进程每 3 秒要求 stdin 输入一行 {"ok": 1},确认超时 2000 ms。
|
||||
# 注意:确认由独立子进程按固定节拍驱动,与扫盘是否进行无关(scan 必须活得比 interval 长才看得到效果)
|
||||
.\.tpv_build\output\VET.exe scan --cache .\vet_cache.json --need-confirm 3 --need-confirm-timeout 2000 2>&1 | Tee-Object .\confirm.log
|
||||
.\__vpcbuild__\output\VET.exe scan --cache .\vet_cache.json --need-confirm 3 --need-confirm-timeout 2000 2>&1 | Tee-Object .\confirm.log
|
||||
```
|
||||
|
||||
`ver` 模式输出形如(**全部在 stderr**;安静模式不含被校验目标路径与目录表清单):
|
||||
@@ -154,7 +154,7 @@ VET - Viper Environment Tool 0.2.0
|
||||
```
|
||||
VET - Viper Environment Tool 0.2.0
|
||||
|
||||
目标: ..\exe\TransPyV.exe
|
||||
目标: ..\exe\viperc.exe
|
||||
|
||||
[0/3] 常用目录表
|
||||
目录表来源: 自动表 (N 条)
|
||||
@@ -212,13 +212,13 @@ VET - Viper Environment Tool 0.2.0
|
||||
- `ver` 子命令不支持 `--path`,始终使用自动表(保持原行为)。
|
||||
|
||||
|
||||
`.PRVERSN` 段由 TransPyV 源码中形如下面的声明生成:
|
||||
`.PRVERSN` 段由 ViperC 源码中形如下面的声明生成:
|
||||
|
||||
```python
|
||||
V_TPV_VERSION: t.CArray[char] | t.attr.section(".PRVERSN") = "0.0.3-dev.428"
|
||||
V_VPC_VERSION: t.CArray[char] | t.attr.section(".PRVERSN") = "0.0.3-dev.428"
|
||||
```
|
||||
|
||||
(见 `TransPyV/App/main.vp:45`,`t.attr.section` 即 `__attribute__((section(...)))`,定义于 `TransPyC/lib/includes/t.py:832`。)
|
||||
(见 `ViperC/App/main.vp:45`,`t.attr.section` 即 `__attribute__((section(...)))`,定义于 `TransPyC/lib/includes/t.py:832`。)
|
||||
|
||||
---
|
||||
|
||||
@@ -528,7 +528,7 @@ VET.exe confirm-watch --interval <x 秒> --timeout <t 毫秒> --parent-pid <scan
|
||||
|
||||
```
|
||||
VET/
|
||||
├── .gitignore # 忽略 output/、temp/、.tpv_build/、*.exe 等
|
||||
├── .gitignore # 忽略 output/、temp/、__vpcbuild__/、*.exe 等
|
||||
├── LICENSE # MIT(与 Venom 同款)
|
||||
├── README.md # 本文件
|
||||
├── project.vpj # 项目配置(llc + clang++,输出 VET.exe)
|
||||
@@ -588,12 +588,12 @@ VET/
|
||||
- `SHGetKnownFolderPath` / `CoTaskMemFree` / `WideCharToMultiByte` / `SetErrorMode` 的实际运行行为。
|
||||
- `SetErrorMode(SEM_FAILCRITICALERRORS)` 对本进程后续文件操作的实际影响。
|
||||
- `GetLocalTime`/`SystemTimeToFileTime`/`FileTimeToSystemTime` 的时间戳(含 FILETIME 100ns 加法)正确性。
|
||||
- **已知偏差(重要)**:仓库内现有预编译产物 `exe/TransPyV.exe` **并不包含** `.PRVERSN` 段——
|
||||
- **已知偏差(重要)**:仓库内现有预编译产物 `exe/viperc.exe` **并不包含** `.PRVERSN` 段——
|
||||
实测其段表为 `.text/.rdata/.buildid/.data/.pdata/.INTR/.WEAK/.reloc`,
|
||||
版本串 `0.0.3-dev.428` 落在 `.data` 段内(源码头 `TransPyV/App/main.vp:45` 虽声明了
|
||||
版本串 `0.0.3-dev.428` 落在 `.data` 段内(源码头 `ViperC/App/main.vp:45` 虽声明了
|
||||
`t.attr.section(".PRVERSN")`)。因此对**该**产物运行 VET,`[1/3]` 会输出"未找到 .PRVERSN 节"
|
||||
并列出实际节名,`scan` 也不会命中它。这是产物/工具链侧的偏差,不是 VET 的解析缺陷;若工具链
|
||||
已改为真正发射该段,或重新构建 TransPyV,则应能命中。
|
||||
已改为真正发射该段,或重新构建 ViperC,则应能命中。
|
||||
|
||||
---
|
||||
|
||||
|
||||
+1
-1
@@ -2,7 +2,7 @@
|
||||
"name": "VET",
|
||||
"version": "1.0.0",
|
||||
"source_dir": "./App",
|
||||
"build_dir": "./.tpv_build",
|
||||
"build_dir": "./__vpcbuild__",
|
||||
"compiler": {
|
||||
"cmd": "llc",
|
||||
"flags": [
|
||||
|
||||
Reference in new issue
Block a user