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

作者:老电工时间:2022-09-13 14:44:26

信捷PLC的C语言函数功能块,在编译时编程软件时自动嵌入操作权限的指令,以防止用户程序越权访问某些功能。如果不希望出现这些指令,可以用C语言的预处理机制绕过,原理很简单:

1、因编程软件检测是否存在特定签名的函数,可用条件为否的预处理指令包含所需函数;

2、因编程软件对所有特定签名的函数都进行处理,可用预处理宏替换函数名称。

如果绕过了权限机制的保护,请自行确保所写代码对系统的安全风险。

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

示例代码如下:

源程序(普通写法):

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 0

void T_QINC ( WORD W, BIT B ) {}

#endif

#define MAIN T_QINC

void MAIN ( WORD W , BIT B )

{

(*(uint64_t*)W)++;

}

处理后:

void T_QINC ( INT16S * W , INT32U B )

{

//begin user code

(*(uint64_t*)W)++;

//end user code

本站仅提供信息发布平台,文章仅代表作者个人观点。

猜你喜欢

首页 > plc > 信捷plc