龙空技术网

信捷PLC C语言函数功能块绕过特权指令的嵌入

taohj 1179

前言:

此刻同学们对“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