void MACRO_RETI(void)
{
asm_RETI() //里面就是一句汇编的RETI,它会抢先与函数自己的RET执行
}; //这个函数自己的RET永远不执行到,因为跳走了
void __HotASM_START__ (void) //启动时运行的代码
{
MACRO_CLR_EA; //关中断
MACRO_Check_Crack; //反破解陷阱
MACRO_RETI(); //释放中断优先级
MACRO_RETI(); //再释放一次
MACRO_LJMP_ANY(main); //用压栈和RET做的任意位置长跳转,地址是main主程序
}; //这里其实会有个RET
菜农来澄清汇编数组和汇编及嵌入汇编最大的不同:
汇编数组内实际存放的是数据而非代码,但用函数指针强行跳入后,数据变“升华”
为代码。
它本来就是为动态链接而设计,故编译期间是找不到静态地址的,至少俺现在无
好办法。
即使能找到静态地址,如汇编的:
lcall xxxx; ajmp xxx
都属于此类。
汇编数组是吴旭光教授与菜农为以后能在任何MCS/ARM/DSP上运行OS
所参照PC的动态链接库DLL/LIB所设计的。
以前虽在DSP上应用,但很局限。
这次在51上大面积推广,故菜农熬夜赶制了HotASM,HotCOM.HotMACRO等,
这样可以用汇编数组(宏)通过COM接口直接相互访问,而且可以和C函数通讯。
最近版本已全面支持C函数调用汇编数组宏,且宏在某些语句要比C精炼的多。
并且很容易加入“反逆向代码”且不影响正常程序。
所以,汇编数组的编写应该基于动态链接的思想,虽然这样代码效率会影响些
但不会影响主流。
菜农是实用主义,不爱说教,只看结果,不管过程。
所以不知XWJ的MACRO_RETI是否能运行???
课毕
凡《网络安全与数据治理》(原《信息技术与网络安全》)录用的文章,如作者没有关于汇编权、翻译权、印刷权及电子版的复制权、信息网络传播权与发行权等版权的特殊声明,即视作该文章署名作者同意将该文章的汇编权、翻译权、印刷权及电子版的复制权、信息网络传播权与发行权授予本刊,本刊有权授权本刊合作数据库、合作媒体等合作伙伴使用。同时,本刊支付的稿酬已包含上述使用的费用,特此声明。