问题标签 [mprotect]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - c++ mprotect 用于读取、写入和执行
作为我正在从事的项目的一部分,我想分配一些内存,然后将操作码写入该内存call
。到那时,代码将跳转到我分配的内存中,运行操作码并使用操作码返回到之前的位置ret
。
我的代码在 Linux 上运行,不需要支持 Windows。
我尝试mprotect
与标志一起使用,PROT_READ | PROT_WRITE | PROT_EXEC
但出现“权限被拒绝”错误。我需要对该内存的写入和执行权限。
我怎样才能实现我正在尝试的目标?为什么我会收到“权限被拒绝”?
分配的内存是使用分配的,aligned_alloc
因此它将与 4KB(页面大小)对齐。
c - 如何使用 mprotect 保护特定内存?
我想通过使用 mprotect 来保护特定的内存区域。
所以我编写了代码来提供一个虚拟地址来保护,但 mprotect 不起作用。
我的代码有问题吗?
这是我的代码。
xcode - 使用 mprotect 使文本段在 macOS 上可写
这基本上就是我想要做的,
所以我试图让代码本质上是可写的。这在当前的 macOS(Catalina 10.15.2)上不起作用,它只是返回-1
并设置errno
为EACCES
,据我所知,这是因为缺乏权利/代码签名。我找到了我需要设置的权利,但我不知道如何去做,也不知道如何实际签署它..
如果我运行codesign -d --entitlements :- <path_to_app>
,它会失败code object is not signed at all
,即使我已经尝试在 Xcode 中配置登录一段时间(我有证书等等)。那么我该怎么做呢?实际上用 Xcode 签名并不明显,所以我相当无能。
c++ - 如何保护对象
我的问题
我有一个单身人士,他的记忆被未知的腐败者破坏了。有些东西正在覆盖单例的内存,以及它周围的数百个字节,值为 0。通过 new 构造对象后,它在应用程序的生命周期内是只读的。
我的目标
我想在腐败时抓住腐败者。我想在构造后将对象的内存保护为只读。这样以后当损坏发生时,系统将在损坏时出现分段错误。
我的问题
看起来 mprotect 是细化到页面级别的。我如何为单例实例“过度分配”对象的完整页面(它远小于 4k,标准页面大小)然后 mprotect 该页面?
linux - 组装,如何使用mprotect?
我正在尝试在 Linux 中进行自我修改代码。我以为它会起作用,但没有。
我在 ubuntu 18.04 上使用了 nasm。
INT 0x80 返回值为-22 0xffffffea
我不知道出了什么问题。
linux - 为什么 mprotect 是与 mmap 不同的系统调用
我最近正在处理与虚拟内存相关的系统调用。从我的手册中mmap
我知道,设置标志时它可以非常强大MAP_FIXED
,在内存中的任何地方创建新的映射。
MAP_FIXED
不要将 addr 解释为提示:将映射放置在该地址。addr 必须适当对齐:对于大多数体系结构,页面大小的倍数就足够了;但是,某些架构可能会施加额外的限制。 如果 addr 和 len 指定的内存区域与任何现有映射的页面重叠,则现有映射的重叠部分将被丢弃。如果无法使用指定的地址,mmap() 将失败。渴望可移植的软件应谨慎使用 MAP_FIXED 标志,记住进程内存映射的确切布局允许在内核版本、C 库版本和操作系统版本之间发生显着变化。仔细阅读 NOTES 中关于这个标志的讨论!
我的问题是,为什么有一个不同的系统调用mprotect
from mmap
,因为它可以通过创建一个具有相同andmmap
的新映射来完成完全相同的工作,并设置你想要的新的?fd
offset
prot
在我看来,所有关于 VM 的操作最终都可以用mmap
and来完成munmap
,因为这些操作基本上只是在玩页表。有人可以告诉我这是否是个坏主意吗?
c - 如何保护数据部分?
我想保护数据部分。以下程序将无法正确运行。我理解mprotect()
应该对齐的第一个论点。但是如何获得数据段的对齐内存地址呢?
编辑:我使用以下代码来获取页面大小。
然后C代码改成如下。
然后,我得到一个分段错误。任何人都可以重现此错误吗?它有什么问题?
EDIT2:我必须在“s”行下方添加以下行,以确保s
自己占据整个页面。然后,程序工作。