2010-01-28 126 views
4

我想知道是否有爲Linux提供一種檢索內存保護的方法。就像,我想恢復使用mprotect更改後的保護。讀取內存保護

回答

1

Linux上的文件/proc/self/maps包含有關虛擬內存當前佈局,每個段的內容以及該段的內存保護的信息。使用mprotect所做的更改將導致文件被適當更新。

通過解析/proc/self/maps,然後開始使用mprotect修改它,您應該有足夠的信息來恢復以前的佈局。

下面的示例示出了在三種情況下的/proc/self/maps內容:

  • 之前正在執行任何操作;
  • mmap(其中顯示文件中的一個額外的條目);最後
  • mprotect(它顯示文件中的權限位更改)。

(使用32位Linux 2.6進行測試)。

#include <sys/mman.h> 
#include <stdio.h> 
#include <errno.h> 
#define PAGE_SIZE 4096 

void show_mappings(void) 
{ 
    int a; 
    FILE *f = fopen("/proc/self/maps", "r"); 
    while ((a = fgetc(f)) >= 0) 
     putchar(a); 
    fclose(f); 
    printf("-----------------------------------------------\n"); 
} 

int main(void) 
{ 
    void *mapping; 

    /* Show initial mappings. */ 
    show_mappings(); 

    /* Map in some pages. */ 
    mapping = mmap(NULL, 16 * PAGE_SIZE, PROT_READ, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); 
    printf("*** Returned mapping: %p\n", mapping); 
    show_mappings(); 

    /* Change the mapping. */ 
    mprotect(mapping, PAGE_SIZE, PROT_READ | PROT_WRITE); 
    show_mappings(); 

    return 0; 
} 

據我所知,沒有比/proc/界面,Linux提供了讓你來決定你的虛擬內存的佈局等機制。因此,解析這個文件是你可以做的最好的。

相關問題