全世界都是我们的cp粉:ARM TrustZone-M安全世界变量阴影非安全变量

我有一个为基于 STM32-L552ZE Cortex M-33 的 MCU 编写的应用程序,该 MCU 使用 TrustZone-M。

两个世界都有一个main.hmain.c,并且两个 wolds 的头文件都声明一个变量foo(即安全main.h和非安全main.h声明foo)。

在我看来,这应该是好的,因为我了解 TrustZone 的方式(诚然,我更多地来自 TrustZone-A,SGX 世界)让我相信两个世界是相互独立的,并且只通过一个明确定义的接口进行交互(通过 NSC 区域的安全 / 非安全函数调用)。

不幸的是,在调试我的代码时,我注意到不安全世界对foo的写入被忽略了。通过检查foo的地址,它位于0x3...,我注意到它被分配在安全世界的 SRAM 中。在取消注释安全世界的foo声明后,其余内容保持不变,0

Question:

我知道 TrustZone-M 通过内存地址实现分离,尽管我会假设链接器足够聪明来区分foo的两个实例。

澄清:

为了使情况更清楚,以下是代码的摘录:

安全主.h:

#ifndef __MAIN_H
#define __MAIN_H
/* Includes */
#include "stm32l5xx_hal.h"
#include "secure_nsc.h"        // Header file declaring the functions into secure world
/* Private includes*/
/* USER CODE BEGIN Includes */
#include "inttypes.h"
#include "string.h"
/* USER CODE END Includes */
...
typedef struct ringbuf{
    volatile int16_t prod_ind;
    volatile int16_t cons_ind;
    volatile int16_t isr_ctr;
    volatile bool_t  empty;
             byte_t  buf[RBUF_LEN];
}ringbuf_t;
ringbuf_t foo;
...
#include "helper.h"
#endif /* __MAIN_H */

不安全的 main.h:

#ifndef __MAIN_H
#define __MAIN_H
/* Includes */
#include "stm32l5xx_hal.h"
#include "secure_nsc.h" /* For export Non-secure callable APIs */
/* Private includes */
/* USER CODE BEGIN Includes */
#include "inttypes.h"
#include "string.h"
/* USER CODE END Includes */
...
typedef struct ringbuf{
    volatile int16_t prod_ind;
    volatile int16_t cons_ind;
    volatile int16_t isr_ctr;                                                                           
    volatile bool_t  empty;
             byte_t  buf[RBUF_LEN];
}ringbuf_t;
ringbuf_t foo;
...
#include "helper.h"
#endif /* __MAIN_H */

helper.h,即安全的和不安全的,都有以下声明(定义存在于它们各自的 helper.c 文件中):

bool_t rb_produce_one(ringbuf_t* rb, byte_t ibyte);

这个函数rb_produce_one是非安全世界用来访问其 ringbufferfoo的函数。

Securemain.c不使用其foo实例(但稍后将使用它)。

非安全main.c通过在helper.h中声明并在helper.c中定义的函数访问foo(同样,helper.hhelper.c存在两次,一次在安全世界,一次在非安全世界)。

本站系公益性非盈利分享网址,本文来自用户投稿,不代表边看边学立场,如若转载,请注明出处

(426)
Cdr辅助线怎么调出来:在 tikz中绘制辅助线(drawing lines in tikz)
上一篇
Cv亚捷个人资料简介:检索 /更改个人资料图片Google个人资料 API
下一篇

相关推荐

  • comeandgetyourlove音乐爱就在你身边

    Come and Get Your Love是一首热门的歌曲,由美国摇滚乐队Redbone演唱。这首歌曲于1974年发行,被收录在他们的专辑《Wovoka》中。歌曲以放克曲风为主,旋律活泼,曲调悠扬,歌词朗朗上口,深受歌迷喜爱。…

    2023-06-29 07:47:31
    0 54 57
  • css预编译器: center;}

    CSS预编译器是一种用于构建CSS的工具,它可以将CSS代码转换为更易于管理和维护的格式。它们可以使CSS代码更加灵活,更易于重用,并且可以帮助开发人员更轻松地组织和管理CSS代码。…

    2023-04-30 05:19:08
    0 98 45
  • python中predict函数参数:如何使用Python的predict函数进行机器学习预测

    示例示例predict函数是scikit-learn中的一个函数,用于预测新样本的输出结果。参数:…

    2023-03-30 08:03:12
    0 95 16
  • canvas 官网Bring Your Ideas to Life with Creative Artwork

    Canvas 官网是一个用于创建图形的 HTML5 API,它可以在浏览器中使用 JavaScript 来绘制 2D 图形。它提供了一个可以在网页上绘制图形的强大工具,可以用来创建动画、游戏、数据可视化等。…

    2023-02-28 09:52:08
    0 36 81
  • qt creator快速入门 第3版 pdf从零开始

    Qt Creator快速入门第3版是一本关于Qt Creator的教程书,旨在帮助读者快速掌握Qt Creator的使用。书中介绍了Qt Creator的基本功能,如如何创建项目、编辑代码、调试代码以及创建应用程序等等。书中还提供了一些实例代码,帮助读者更好地理解Qt Creator的用法。…

    2023-05-16 03:03:33
    0 22 73
  • cherry键盘win键不能用:解决Cherry键盘Win键无法使用的措施

    如果您的cherry键盘win键不能用,可能是由于系统设置问题导致的。下面提供一些代码,可以帮助您解决这个问题:打开“控制面板”,然后点击“硬件和声音”,打开“键盘”选项卡。…

    2023-08-27 03:36:33
    0 96 97
  • certificate意思一步一步指南

    示例示例是一种用于证明某个人或机构拥有某种资格或资质的文件。它可以是一种认证,也可以是一种奖励或认可。代码示例:…

    2023-09-14 15:01:58
    0 62 94
  • win10系统ctrl加c不能复制:解决win10系统下Ctrl+C不能复制的问题

    解决方案解决方案答:可能是由于系统快捷键被修改所导致的,可以尝试恢复系统默认快捷键;…

    2023-04-15 00:45:32
    0 16 26

发表评论

登录 后才能评论

评论列表(37条)