相关疑难解决方法(0)

有没有比解析/ proc/self/maps更好的方法来计算内存保护?

在Linux(或Solaris)上,有一种比手动解析更好的方法/proc/self/maps来确定您是否可以读取,写入或执行存储在内存中一个或多个地址的任何内容?

例如,在Windows中你有VirtualQuery.

在Linux中,我可以mprotect更改这些值,但我无法读回它们.

此外,是否有任何方法可以知道这些权限何时发生变化(例如,当有人使用mmap我背后的文件时),而不是做一些非常具有侵略性的事情并ptrace在进程中的所有线程上使用并拦截任何syscall可能影响内存的尝试地图?

更新:

不幸的是,我在JIT中使用它,它几乎没有关于它正在执行的代码的信息,以获得常量的近似值.是的,我意识到我可以有一个可变数据的常量映射,比如Linux使用的vsyscall页面.我可以放心地假设任何未包含在初始解析中的内容都是可变且危险的,但我对这个选项并不完全满意.

现在我所做的是阅读/proc/self/maps并构建一个结构,我可以通过二进制搜索来获得给定地址的保护.每当我需要了解一些不在我的结构中的页面时,我会重新阅读/ proc/self/maps,假设它已经同时添加,或者我将要进行段错误.

它似乎解析文本以获取此信息,而不知道它何时更改是非常苛刻的.(/dev/inotify几乎不适用于任何事情/proc)

c linux system-calls mprotect virtualquery

18
推荐指数
1
解决办法
5842
查看次数

在内存中明确地为特定地址/位置分配或访问值?

我确切的问题是,有任何规定c,并c++明确指定的值,以特定的地址,例如,假设我要存储200x1846010内存中的地址,我也想访问使用相同的地址(值0x1846010).

可能很容易,但如果可以,我真的很困惑如何做到这一点.

任何人都可以解释这是可能的,如果是,那么如何(有适当的例子),如果没有那么为什么?

提前致谢.

c c++ memory

1
推荐指数
1
解决办法
209
查看次数

标签 统计

c ×2

c++ ×1

linux ×1

memory ×1

mprotect ×1

system-calls ×1

virtualquery ×1