2017-03-01 20 views
1

我正在开发一个家庭项目,以了解有关嵌入式系统的更多信息。所以我也没有专业的用C语言:)失败注入:尝试写入受保护的RAM区域

可以说我有一个结构:

static st_struct myStruct; 

的结构定义为:

typedef struct 
{ 
    int a; 
    long xy; 
} st_struct 

为了保持代码的简洁这里,该结构被定义并且只在受保护的RAM区域内有效,地址空间从0x04001000 - 0x04003000。 这个受保护的区域阻止其他任务写入它,它们只能读取。

如果某个任务/函数试图修改或写入该区域,则CPU将重置。

变量myStruct位于地址0x04001f15内。

我想挑起这种尝试写入“不允许”的行为,完全针对myStruct变量。在这个例子中,实现这种失败注入的最好方法是什么?你能举一个例子怎么用指针算法来做这个吗?

+1

如果你说结构确实放在该区域,为什么不简单地执行'myStruct.a = 0; myStruct.xy = 0;'? –

+1

我不清楚你如何安排位于保护区内的建筑物,但你这样做似乎是合理的。在这种情况下,按照@AjayBrahmakshatriya的建议,为其成员分配值应该会导致尝试写入该区域。为了避免这些写入延迟或优化的可能性,您应该声明结构为'volatile'。 –

+0

对不起,我忘了提及struct声明,只在RAM保护区内有效。所以外面只有从结构读取是可能的,但不能写。写入会导致CPU复位。 – JohnDoe

回答

2

根据我的理解,您希望其他应用程序的代码如此产生错误行为。

在其他进程/程序做到这一点

typedef struct 
{ 
    int a; 
    long xy; 
} st_struct; 
st_struct *ms = (st_struct*) 0x04001f15; 
ms->a = 0; 
ms->xy = 0; 

这种方式,其他应用程序将尝试访问相同的结构,并且将故障。

相关问题