问题标签 [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 投票
0 回答
694 浏览

linux - 如何在 ARM 应用程序启动时加速 set_tls 和 mprotect?

我在 NAND (UbiFS) 上使用 ARM (TI814x)。启动 QtGui 应用程序时,大约需要 1 秒,直到 set_tls(线程本地存储?)和 mprotect 完成(而加载所有共享库需要 1.3 秒)。

为什么需要这么长时间,有没有办法(例如配置)来加快速度?

例如,当编译没有 QtGui 模块的应用程序时,它会快得多……但这不是一个选择。

0 投票
1 回答
83 浏览

linux - 进程何时需要同时具有写入和执行权限的内存页

我试图了解如何隔离和保护程序。

当进程需要PROT_WRITE |PROT_EXEC在内存页面上时,是否有任何有效的情况?这可以避免吗?

这似乎与 NX 位或 W^X 或 DEP 试图实现的目标相反。

Libre office 似乎正在使用它,并在硬化的 linux 上造成了很多麻烦。

https://github.com/nning/linux-pax-flags/pull/3

0 投票
2 回答
2204 浏览

c++ - mmap 是否分配页面或页面的一部分?

我很困惑,是mmap分配一整页内存(不管指定的大小),还是只分配您请求的大小?真的,我很好奇后续调用会发生什么mmap- 第二次调用会分配一个新页面(即使两个调用都使用页面大小以下的数量)还是会分配与前一个调用相邻的块?

同样的事情mprotect- 是保护整个页面,还是只保护指定的部分?

0 投票
0 回答
106 浏览

c++ - 启用 mprotect 不会恢复正常状态?

我正在尝试创建一个程序来跟踪进程的内存。我所拥有的是在某个时刻尝试使用我的保护功能保护所有内存:

}

然后我注册了一个中断处理程序:

该进程似乎卡在某个 fwrite 上……但我可以在日志中看到该进程试图访问的内存早已被 segaulted 并返回到正常状态。我还可以看到该进程不会停止从那个块中读取的第一个内存,但是在读了很多页之后......有没有人有任何想法/线索?

谢谢。

0 投票
0 回答
111 浏览

c - mprotect 无法从 fread 内的 fifo 写入/读取中断中恢复?

我有一个简单的过程,其中包含 2 个从 fifo 写入和读取的进程。我想在阅读器读取的缓冲区上添加 mprotect ,然后在它有中断时“释放”它(添加 PROT_WRITE | READ)。

似乎如果我在常规文件上执行此操作(仅读取,而不是 fifo)它可以工作,但如果我在 fifo 上执行此操作,则读取器的 fread 返回错误。

我怀疑在fifo内接收中断是不好的..但它应该被授予权限..有人知道吗?

谢谢。

0 投票
1 回答
587 浏览

c++ - mprotect 和文件句柄

我有一个简单的程序,我试图保护一块内存,然后将一个文件读入该内存,当它出现段错误时释放它..首先我认为如果文件是fifo只有一个问题..但现在似乎即使是普通文件也会失败,

这是代码:

注意 //*buffer = 0;,如果我取消标记这一行,程序会出现段错误并正常工作..有人知道吗?errno 是错误的地址。

谢谢!

更新: 这里似乎问了一个类似的问题: Loading MachineCode From File Into Memory and Executing in C -- mprotect Failing where posix_memalign isSuggested,我试过这个但没有用。

0 投票
1 回答
1034 浏览

linux - mprotect : 内存保护是如何实现的

我已经知道 mprotect() 系统调用在 BSD 中有 4 种保护模式,但我的问题是这种保护是如何实现的(硬件或软件实现)?

假设我们将特定页面的保护设置为 PROT_NONE ,它真的取决于我正在使用的硬件还是通过在页表中的指定页面上设置一些标志来某种软件技巧。

似乎这种对硬件的保护依赖于我们拥有的MMU,但我不确定。

您可以在以下位置找到有关 mprotect 和分页的更多信息:

BSD 手册页

分页 - 维基

0 投票
1 回答
544 浏览

c - 将 mprotect 系统调用注入到跟踪的进程中失败并显示 EFAULT

我正在将mprotect调用注入到跟踪的进程中:

但是调用失败,返回 -14 ( EFAULT)。我查看了mprotect源代码(内核 3.13),不明白为什么我的系统调用会返回这个。

如果我跟踪我注入的调用并打印出寄存器,我会看到以下内容:

为了验证系统调用格式,我添加了mprotect对孩子的调用并转储了它的参数和寄存器:

孩子的电话成功了。因此,鉴于我正在使用相同的参数进行相同的系统调用(10),为什么注入的调用会失败,EFAULT而来自孩子的调用成功?

调用之间的唯一区别是一些垃圾regs.r8,但是基于X86_64 上的系统调用表,regs.r9我不相信这些寄存器的内容会影响系统调用。regs.r10

0 投票
1 回答
1022 浏览

c - C - 是否可以保护小于页面的内容

我真的在寻找任何解决方案——我的目标是将一个小于系统页面大小的区域设置为 PROT_READ、PROT_WRITE、PROT_EXEC 或 PROT_NONE。这可能吗?似乎 mprotect 只是保护页面大小的倍数......

如果不可能,这种设计选择的原因是什么?

0 投票
1 回答
213 浏览

c - 静态计算地址的对齐页面

我需要静态计算包含精灵文本段的第一页的地址,以便使用mprotect()并使文本段可写。

Section Headers: [Nr] Name Type Addr Off Size ES Flg Lk Inf Al .. [14] .text PROGBITS 08048380 000380 0002e0 00 AX 0 0 128

有任何想法吗?