我想知道是否有爲Linux提供一種檢索內存保護的方法。就像,我想恢復使用mprotect更改後的保護。讀取內存保護
Q
讀取內存保護
4
A
回答
1
基於由davidg答案,這裏的功能unsigned int read_mprotection(void* addr)
: re_mprot.c,re_mprot.h從the reDroid project at github(代碼適用於Android,應該移植到其他Linux版本)。
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提供了讓你來決定你的虛擬內存的佈局等機制。因此,解析這個文件是你可以做的最好的。
相關問題
- 1. 試圖讀取寫入保護內存
- 2. 讀/寫保護的內存?
- 3. 在內存保護操作系統中讀取內存
- 4. AccessViolationExceptiond:試圖讀/寫保護的內存
- 5. MonoTouch:NSData內存保護
- 6. C#的DllImport試圖讀取或使用寫入保護內存
- 7. 試圖讀取或寫入保護內存System.Windows.Forms.UnsafeNativeMethods.CallWindowProc()
- 8. 試圖讀取或寫入受保護的內存ASP.Net
- 9. 錯誤:C#試圖讀取或寫入受保護的內存
- 10. word.open()錯誤 - 嘗試讀取或寫入受保護的內存
- 11. 試圖讀取或寫入受保護的內存
- 12. AccessViolationException,試圖讀取或寫入受保護的內存
- 13. C/C++:「試圖讀取或寫入保護內存」異常
- 14. glutesellator嘗試讀取或寫入受保護的內存
- 15. Accessviolationexception試圖讀取或寫入受保護的內存
- 16. C# - Marshal.Copy:嘗試讀取或寫入受保護的內存
- 17. C#試圖讀取或寫入受保護的內存錯誤
- 18. 試圖讀取或寫入保護內存
- 19. EmguCV試圖讀取或寫入保護內存
- 20. 嘗試讀取或實體寫入保護內存架構
- 21. System.AccessViolationException:嘗試讀取或寫入受保護的內存
- 22. 試圖讀取或寫入保護內存-SQL
- 23. C#Image:試圖讀取或寫入受保護的內存
- 24. System.AccessViolationException:試圖讀取或寫入受保護的內存
- 25. c#System.AccessViolationException:試圖讀取或寫入受保護的內存。
- 26. Marshal.StructureToPtr扔「試圖讀取或寫入保護內存」錯誤
- 27. C#dllimport的:試圖讀取或寫入保護內存
- 28. 嘗試讀取或寫入受保護的內存 - dllimport的
- 29. DLLImport get嘗試讀取或寫入受保護的內存
- 30. 試圖讀取/寫入受保護的內存