问题标签 [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.

0 投票
2 回答
1375 浏览

c++ - c++ mprotect 用于读取、写入和执行

作为我正在从事的项目的一部分,我想分配一些内存,然后将操作码写入该内存call。到那时,代码将跳转到我分配的内存中,运行操作码并使用操作码返回到之前的位置ret

我的代码在 Linux 上运行,不需要支持 Windows。

我尝试mprotect与标志一起使用,PROT_READ | PROT_WRITE | PROT_EXEC但出现“权限被拒绝”错误。我需要对该内存的写入和执行权限。

我怎样才能实现我正在尝试的目标?为什么我会收到“权限被拒绝”?

分配的内存是使用分配的,aligned_alloc因此它将与 4KB(页面大小)对齐。

0 投票
0 回答
118 浏览

c - 如何使用 mprotect 保护特定内存?

我想通过使用 mprotect 来保护特定的内存区域。

所以我编写了代码来提供一个虚拟地址来保护,但 mprotect 不起作用。

我的代码有问题吗?

这是我的代码。

0 投票
1 回答
3999 浏览

xcode - 使用 mprotect 使文本段在 macOS 上可写

这基本上就是我想要做的,

所以我试图让代码本质上是可写的。这在当前的 macOS(Catalina 10.15.2)上不起作用,它只是返回-1并设置errnoEACCES,据我所知,这是因为缺乏权利/代码签名。我找到了我需要设置的权利,但我不知道如何去做,也不知道如何实际签署它..

如果我运行codesign -d --entitlements :- <path_to_app>,它会失败code object is not signed at all,即使我已经尝试在 Xcode 中配置登录一段时间(我有证书等等)。那么我该怎么做呢?实际上用 Xcode 签名并不明显,所以我相当无能。

0 投票
3 回答
193 浏览

c++ - 如何保护对象

我的问题

我有一个单身人士,他的记忆被未知的腐败者破坏了。有些东西正在覆盖单例的内存,以及它周围的数百个字节,值为 0。通过 new 构造对象后,它在应用程序的生命周期内是只读的。

我的目标

我想在腐败时抓住腐败者。我想在构造后将对象的内存保护为只读。这样以后当损坏发生时,系统将在损坏时出现分段错误。

我的问题

看起来 mprotect 是细化到页面级别的。我如何为单例实例“过度分配”对象的完整页面(它远小于 4k,标准页面大小)然后 mprotect 该页面?

0 投票
1 回答
263 浏览

linux - 组装,如何使用mprotect?

我正在尝试在 Linux 中进行自我修改代码。我以为它会起作用,但没有。

我在 ubuntu 18.04 上使用了 nasm。

INT 0x80 返回值为-22 0xffffffea

我不知道出了什么问题。

0 投票
1 回答
278 浏览

linux - 为什么 mprotect 是与 mmap 不同的系统调用

我最近正在处理与虚拟内存相关的系统调用。从我的手册中mmap我知道,设置标志时它可以非常强大MAP_FIXED,在内存中的任何地方创建新的映射。

MAP_FIXED
不要将 addr 解释为提示:将映射放置在该地址。addr 必须适当对齐:对于大多数体系结构,页面大小的倍数就足够了;但是,某些架构可能会施加额外的限制。 如果 addr 和 len 指定的内存区域与任何现有映射的页面重叠,则现有映射的重叠部分将被丢弃。如果无法使用指定的地址,mmap() 将失败。渴望可移植的软件应谨慎使用 MAP_FIXED 标志,记住进程内存映射的确切布局允许在内核版本、C 库版本和操作系统版本之间发生显着变化。仔细阅读 NOTES 中关于这个标志的讨论!

我的问题是,为什么有一个不同的系统调用mprotectfrom mmap,因为它可以通过创建一个具有相同andmmap的新映射来完成完全相同的工作,并设置你想要的新的?fdoffsetprot

在我看来,所有关于 VM 的操作最终都可以用mmapand来完成munmap,因为这些操作基本上只是在玩页表。有人可以告诉我这是否是个坏主意吗?

0 投票
1 回答
216 浏览

c - 在分配的内存上使用 mprotect() 的最便携方式

0 投票
1 回答
75 浏览

c - 如何保护数据部分?

我想保护数据部分。以下程序将无法正确运行。我理解mprotect()应该对齐的第一个论点。但是如何获得数据段的对齐内存地址呢?

编辑:我使用以下代码来获取页面大小。

然后C代码改成如下。

然后,我得到一个分段错误。任何人都可以重现此错误吗?它有什么问题?

EDIT2:我必须在“s”行下方添加以下行,以确保s自己占据整个页面。然后,程序工作。

0 投票
2 回答
710 浏览

linux - 运行`make qemu`得到错误:`qemu_mprotect__osdep: mprotect failed: Permission denied`

我正在尝试在mac m1上做 mit6.828 实验室。安装后riscv-tool-chain,我尝试运行make qemu似乎是用来启动内核的,但一开始我得到了这个错误:

所以我从 github 克隆了 qemu 存储库以获取源代码,并检查版本到 v5.1.0,然后我应用此链接提到的此链接路径的补丁

配置运行如下:

makeandmake install似乎运行良好,但是当我在实验室再次执行时make qemu,又出现了一个错误,我仍然没有找到如何解决这个问题: