mprotect

    0热度

    1回答

    我正在使用mprotect将一些内存页面设置为写保护。当在该存储器区域尝试任何写入时,程序将获取SIGSEGV信号。从信号处理程序我知道在哪个内存地址尝试写入,但我不知道如何找出哪条指令导致写保护违规。所以在信号处理程序中,我正在考虑读取程序计数器(PC)寄存器以获取错误的指令。有没有简单的方法来做到这一点?

    2热度

    2回答

    我想获取mprotect处理程序中的当前程序计数器(PC)值。从那里我想通过'n'指令增加PC的价值,以便程序跳过一些指令。我想为Linux内核版本3.0.1做所有这些。任何关于数据结构的帮助,我可以从中获得PC的价值以及如何更新这个价值?示例代码将不胜感激。提前致谢。 我的想法是在内存地址写入时使用某些任务。所以我的想法是使用mprotect使地址写保护。当某些代码尝试在该内存地址上写入内容时,

    5热度

    2回答

    我一直试图用mprotect来反对阅读,然后写作。 这里是我的代码 #include <sys/types.h> #include <sys/mman.h> #include <stdio.h> #include <stdlib.h> #include <unistd.h> int main(void) { int pagesize = sysconf(_SC_PAGE_S

    0热度

    1回答

    我正在编写一个需要更改任务的页面权限的内核模块。通常情况下,该任务只会调用mprotect并设置权限。据我了解,Linux内核有sys_mprotect,它执行实际的系统调用。 我的Linux内核模块可能调用sys_mprotect吗?我似乎无法找到允许的内核API。

    1热度

    2回答

    我想授予对ELF二进制文件中所有内存页的完全权限(读,写,执行)。理想情况下,我希望能够对二进制文件或目标文件进行转换,就像可以用objcopy更改符号一样。我还没有找到一个好办法来做到这一点。我也可以使用一个解决方案,它涉及在启动时运行代码,在每个页面上调用mprotect,标记为PROT_READ | PROT_WRITE | PROT_EXEC。我简单地尝试了这一点,但是我还没有找到一个很好

    0热度

    2回答

    有没有办法找出哪些匿名虚拟内存区域是由libc创建/访问的? 我有一个程序,其地址空间mprotect秒VMAs。 但是当mprotect是一个将被libc访问的区域时,会发生SIGSEGV。不幸的是,我安装的信号处理程序只处理我的代码发生的错误,而不是libc。 详细地说,我得到的错误是因为printf使用可变参数。它试图访问位于va_list结构内的reg_save_area的位置。那个位置属

    1热度

    1回答

    我正试图了解程序如何隔离和保护。 当存储页面上的进程需要PROT_WRITE |PROT_EXEC时是否有任何有效的情况?这可以避免吗? 这似乎与NX位或W^X或DEP试图实现的事情相反。 自由职业似乎正在使用这一点,并在硬化的linux上创建了很多麻烦。 https://github.com/nning/linux-pax-flags/pull/3

    0热度

    1回答

    我知道mprotect用于保护整个内存页面。任何人都可以请告诉我,如果有一种方法来保护和unportect一个单一的内存字节?

    1热度

    1回答

    对于我的大学项目,我需要WRITE保护整个地址空间。我正在阅读/proc/self/maps文件并解析映射。 所以对于格式08048000-0804c000 r-xp 00000000 08:03 7971106 /bin/cat的每个条目,我读了前两个条目(这里08048000 & 0804c000),将它们转换为十进制。假设十进制等效值分别为A & B。然后我做mprotect((int*)A

    3热度

    1回答

    ,我真的寻找任何解决这个 - 我的目标是建立比系统的页面大小PROT_READ,PROT_WRITE,PROT_EXEC或PROT_NONE较小的区域。这可能吗?这似乎只是mprotect的保护页面大小的倍数... 如果这是不可能的,什么是这个设计选择的原因是什么?