gpt4 book ai didi

c++ - gcc - 如何检测基于指针的内存访问

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:07:38 25 4
gpt4 key购买 nike

我专注于 micropython,特别是分支 dynamic-native-modules .

此功能将在未来允许您将 C/C++ 函数编译为原生 .obj 并将其与 .py 接口(interface)打包在一起,用于巨大的速度提升。

太棒了!但问题是,如果您使用的是实时操作系统,doesn't have virtual memory , 那么任何正在执行的 native 代码都可以访问地址空间的任何部分,包括外围设备、RTOS 的状态等。

你不希望用户能够做这样的事情:

void user_func()
{
/* point to arbitrary memory, potentially the reset registers, flash erase . . . you get the point */
int * a = (int*)0x1234;
*a = 0x10110000; // DESTROY!!!
}

即使是以下内容也应该被禁止:

void user_func()
{
int a;
(int*)(&a-1000) = 0x10010111;
}

解决方案?

  • 创建自己的 gcc 版本(针对每种二进制格式)
  • 反编译 .obj 文件并检测指针的使用(针对每个二进制二进制格式)

意见反馈

我知道阻止恶意用户可能是不可能的,但这不是第一个担心的问题。我们想停止善意但意外的代码。如果不可能阻止每一个案例,那没关系

如果我们能够禁止/检测显式指针访问并简单地提供有关数组使用的警告,那仍然非常有值(value)。

WARNING: YOU'RE USING AN ARRAY! MAKE SURE YOU DON'T GO OUT-OF-BOUNDS

最佳答案

最好的机会是 GCC 插件,它查看前端生成的 GENERICGIMPLE IR 并实现您想要的政策。根据您要接受的政策和源代码,这可能需要大量工作并且非常困难。

如果您想要一种纯粹基于语法或基于类型的方法(简单地拒绝所有指针算法),那么 Clang 及其 AST 比 GCC 更容易使用。

关于c++ - gcc - 如何检测基于指针的内存访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47187371/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com