Skip to content

Latest commit

 

History

History
76 lines (61 loc) · 5.08 KB

dyncode-compiler-progress.md

File metadata and controls

76 lines (61 loc) · 5.08 KB

語言: English | 简体中文 | 繁體中文 | 日本語 | 한국어 | Français | Deutsch | Español | Italiano | Русский | العربية

← DynCode 編譯器

DynCode 編譯器 — 進度追蹤

階段 0 — macOS arm64 MVP(已交付)

  • 目錄與 CMake 骨架(nevercDynCode 程式庫)
  • ZeroRelocPass:兩階段(Prep + Stackify),可變全域變數自動棧化
  • Data2TextPass:兩階段(常數陣列 → 堆疊區塊儲存;SROA 後向量常數拆分;ConstantFP → volatile 載入位元模式)
  • SyscallStubPass:表驅動白名單,涵蓋 Darwin BSD / Linux arm64 / Linux x86_64 / Android 系統呼叫
  • AllBlrPass:可選的積極間接呼叫改寫
  • DynCodeExtractor:Mach-O .o → 扁平 .bin,含節內重定位修補
  • CLI 選項(透過產生的 neverc/include/neverc/Invoke/Options.td.h):-fdyncode、-fdyncode-all-blr、-mdyncode-syscall、-fdyncode-keep-obj=、-fdyncode-entry=
  • 全平台預設 PIC(isPICDefault() 統一回傳 true)
  • 通用遞迴棧化(函式指標表、字串指標表、巢狀結構表、ConstantExpr GEP/BitCast 初始化器)
  • IndirectBrPass:GCC computed-goto(&&label)→ switch,含多分派點表共享
  • SIMD 向量常數內聯(inlineVectorConstants)
  • _Thread_local 自動降級為 static
  • 原生 macOS arm64 loader(MAP_JIT + i-cache flush)

測試:108/108 dyncode 斷言通過。二進位大小:add 8B、fib 64B、hello 64B、big_const 632B。

階段 1 — Linux / Android / Windows 跨平台(已交付)

  • TargetDesc 抽象:表驅動的平台差異
  • 跨平台 -mdyncode-syscall 語意(替代僅 Darwin 的 -mdyncode-libsystem)
  • Linux / Android 系統呼叫號表(Darwin BSD 100+、Linux arm64 130+、Linux x86_64 150+)
  • DynCodeExtractor 重構為 MachOExtractor / ELFExtractor / COFFExtractor
  • ELF 擷取器(arm64:R_AARCH64_CALL26/JUMP26/ADR_PREL_PG_HI21/等;x86_64:R_X86_64_PC32/PLT32)
  • COFF 擷取器(arm64:IMAGE_REL_ARM64_BRANCH26/等;x86_64:IMAGE_REL_AMD64_REL32/等)
  • Windows PEB 匯入 pass(WinPEBImportPass),含真實 PEB walk 解析器
  • 多 DLL Win32 API 白名單(~210 API,跨 kernel32/ntdll/user32/ws2_32/advapi32/shell32)
  • MemIntrinPass:memcpy/memset/memmove/memcmp/bcmp/bzero/memchr + strlen/strcpy/strcmp/等 → 內聯位元組迴圈輔助函式
  • CompilerRtPass:__int128 除法/取餘 → 內聯長除法輔助函式
  • Windows aarch64-pc-windows-msvc 前端支援
  • MIRPrepPass:跨平台偽指令清除(CFI/EH/XRay/StackMap/SEH/FENTRY/等)
  • MIR + 位元組級混淆鉤子(IR/MIR/位元組流三層共 11 個鉤子)
  • AArch64 非 Darwin long double 自動降級為 binary64
  • DynCode 墊片標頭檔:<windows.h>、<unistd.h>、<fcntl.h>、<sys/stat.h>、<sys/mman.h>、<string.h>、<stdlib.h>
  • Windows POSIX 相容層(13 個 POSIX→Win32 橋接:write→WriteFile、mmap→VirtualAlloc 等)
  • K&R 隱式宣告自動修復(50+ 規範 POSIX 簽章)
  • 表驅動淨化(架構分支硬編碼 → 零)
  • KernelImportPass:ring-0 自動解析器支援的呼叫點改寫
  • 核心輔助函式名表驅動診斷(KernelHelperNames.def)
  • <neverc/dyncode/kernel.h> 用於 ring-0 進入點慣例
  • 進入點偏移零強制(placeEntryFirst)
  • Finalize 管線:壞位元組重寫器 SDK + 字元集編碼器 SDK + 大小約束
  • 樹外 C 外掛 API(NevercPluginAPI.h):11 個 dyncode 掛鈎點(NEVERC_INTERPOSE_SC_*)
  • x86_64 -mno-implicit-float 注入(防止後端 SSE 常數池溢出)
  • 跨平台 loader(macOS/Linux/Windows)

測試:743+ dyncode 斷言,全部通過(涵蓋 8 個 triple)。NeverC 總測試套件:1000+ 測試通過。

階段 2 — 可列印 / 字母數字編碼器(計畫中)

  • ARM64 可列印 dyncode 編碼器(0x20–0x7e 指令子集)
  • x86_64 字母數字編碼器
  • 自解碼樁(decoder stub)產生
  • 編碼後大小 / 熵統計

階段 3 — 多型 / 自修改(計畫中)

  • 多型引擎:相同原始碼 → 每次編譯產生不同等價位元組序列
  • 自修改程式碼:執行時期解密 / 解壓縮載荷本體
  • 反偵測:避免已知 dyncode 特徵模式

未來擴充

  • iOS arm64(程式碼簽章 + JIT 越獄場景)
  • Cortex-M / Thumb
  • RISC-V 64