Skip to content

azwpayne/vmp-example

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 

Repository files navigation

vmp-example

虚拟机保护的示例代码, 用于了解vmp。

核心组件

  • _bc:字节码指令数组(程序代码)
  • pc:程序计数器(Program Counter),指向当前执行的指令
  • stack:操作数栈,用于临时存储数据
  • vars:变量存储区(类似寄存器或内存)
opcode insn Description
1 push 将下一个字节作为立即数压入栈
2 add 弹出栈顶两个值,相加后压回栈
4 print 弹出栈顶值并打印
6 jmp 无条件跳转到指定地址
7 jz 弹出栈顶值,若为0则跳转(条件跳转)
8 load 从变量数组加载值到栈
9 Text 将栈顶值存入变量数组
11 lt 比较操作:弹出两值,若 a < b 则压入1,否则压入0
let x = 0;
while (x < 3) {
    console.log(x);
    x = x + 1;
}
// other
for (let i = 0; i < 3; i++) {console.log(i)}

逐步执行过程

  1. 初始化:vars[0] = 0(将0存入变量0)
  2. 循环开始(地址4):
  • 加载 vars[0] 到栈
  • 压入立即数 3
  • 比较是否小于(vars[0] < 3)
  • 如果结果为0(false),跳转到地址24(结束)
  1. 循环体:
  • 加载并打印 vars[0] 的值
  • 加载 vars[0],压入 1,相加
  • 将结果存回 vars[0](即自增1)
  • 无条件跳转回地址4(继续循环)

About

Virtual Machine Protection example code

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors