前言:
此刻同学们对“c语言r0”都比较讲究,姐妹们都需要知道一些“c语言r0”的相关知识。那么小编在网上搜集了一些有关“c语言r0””的相关知识,希望你们能喜欢,朋友们一起来学习一下吧!信捷PLC的C语言函数功能块,编译时编程软件时会自动嵌入操作权限的指令,以防止用户程序越权访问某些功能。
如果不希望出现这些指令,可以用C语言的预处理机制绕过,原理很简单:
1、因编程软件检测是否存在特定签名的函数,可用条件为否的预处理指令包含所需函数;
2、因编程软件对所有特定签名的函数都进行处理,可用预处理宏替换函数名称。
如果绕过了权限机制的保护,请自行确保所写代码对系统的安全风险。
以下为示例代码:
源程序(普通写法):void T_QINC ( WORD W , BIT B ){ (*(uint64_t*)W)++;}处理后:void T_QINC ( WORD W, BIT B ) { //以下5条汇编指令用于清除CONTROL寄存器的特权位 asm("PUSH {R0}"); asm("MRS R0,CONTROL"); asm("ORR R0,R0,#0x1"); asm("MSR CONTROL,R0"); asm("POP {R0}"); //begin user code (*(uint64_t*)W)++; //end user code //以下汇编指令用于获取特权 asm("svc 0x01");}//---------------源程序(绕过特权):#if 0void T_QINC ( WORD W, BIT B ) {}#endif#define MAIN T_QINCvoid MAIN ( WORD W , BIT B ){ (*(uint64_t*)W)++;}处理后:void T_QINC ( INT16S * W , INT32U B ){ //begin user code (*(uint64_t*)W)++; //end user code}
标签: #c语言r0