hotpower, 别激动
程序在虚拟机中模拟运行,不是在反汇编。反汇编是运行完之后进行的。
"如果协议中无此命令,而中断服务程序有,并设置了非法的入口地址. 那么整个串口中断服务程序对吗???还继续强行编译吗???" ----- 不会,因为虚拟计算机不会运行。
我看了你的代码,首先说明:你的所有针对反汇编程序的花招对于虚拟机无效,因为程序在仿真 **运行**, 不会被 JZ, reti 骗过。再看看对付虚拟机的部分:
在此加入系统初始化语句 ;以下三句解读DPTR的指针TESTDATA CLR A JZ $+3;肯定运行NOP;MOV DPTR,#TESTDATA DW 1200H;低8位为NOP指令 ;-------------------------------------------------------------------; ;虚拟机不晕??? ;CODEDATAPROTECT子程序里明确告诉有指令LJMP 55AAH ;怎么现在却变成取数据55AAH了??? ;-------------------------------------------------------------------; MOV DPTR,#TESTDATA;取出被保护的数据,让虚拟机产生矛盾 MOVC A,@A+DPTR
虚拟机绝不会晕,你的程序如何在目标机中运行,那么同样会在虚拟机中运行。最终走过的地址都是代码。
51 与 pc 最大的不同是 pc 的代码在 ram 里运行,因而花招更多,比如代码覆盖,代码变形,使得目标代码不唯一, 这才是对付虚拟机 + 反汇编的有效武器。而且做一个mcu 虚拟机比想象中的容易很多,我以前是用 8086 汇编模拟 mcu,非常简单。 |
|