【问题标题】:C - How to restrict address access in heap?C - 如何限制堆中的地址访问?
【发布时间】:2018-08-03 09:06:54
【问题描述】:

对于堆栈中存储的变量,我们可以使用static 来避免从其他文件访问。有没有办法避免其他文件访问某个地址的指针?

【问题讨论】:

  • 即使使用static,它仍然可以通过指针从其他文件访问:) 为什么你仍然需要restrict 它?尽量缩小变量的作用域,如果不想从别处访问就不要绕过它。
  • 也许只为他们提供一个指向常量的指针。静态函数在其他编译单元中不直接可见。但是如果他们有一个指向那个区域的指针,他们就可以从那个位置读/写,或者调用函数。
  • 我正在编写一个实现,并希望程序在其他文件意外访问某些特定内存时抛出类似错误的东西。所以它可能更容易调试。 @P.P.
  • 你必须解决的第一个问题是这样的系统如何知道什么是对任何内存的正确访问。
  • @YiLinLiu,没有办法在您的代码中获取异常以访问其他文件中定义的另一个变量。定义变量的文件在程序的链接阶段丢失,您无法限制对自己内存的访问(没有操作系统帮助来区分您的进程对自身任何虚拟地址的访问)

标签: c pointers static heap-memory


【解决方案1】:

首先,为了解决问题,静态变量永远不会在堆栈上分配,因为它们本质上是全局变量,它们根本不会污染全局命名空间。获取指向静态变量的指针并对其进行更改是微不足道的,静态是编译器强制构造的。

回到实际问题,不,您不能尝试直接检查内存访问。你怎么知道你正在访问的内存是否有效?不过,您可以做一些事情。例如,您可以使用自己的内存管理函数包装 malloc 和 free,并跟踪分配和释放的内存以及元数据。然后,您可以使用另一个包装函数来处理指针取消引用,并根据需要检查元数据。如果你愿意,你仍然可以使用原始指针来造成严重破坏,所以这并不多。

【讨论】:

    猜你喜欢
    • 2020-01-02
    • 1970-01-01
    • 1970-01-01
    • 2014-04-10
    • 2015-08-16
    • 1970-01-01
    • 2013-01-18
    • 1970-01-01
    • 2017-04-06
    相关资源
    最近更新 更多