2010-10-05 21 views
7

Tôi hiểu ý nghĩa của các bit rwxps. r-xp dành cho .text. rw-p là cho .data/.bss/heap/stack. Việc sử dụng chỉ ---p trang là gì?Quyền "--- p" trong/proc/self/maps là gì?

Ví dụ thấy sản lượng này cat /proc/self/maps

 
00400000-0040b000 r-xp 00000000 08:03 827490        /bin/cat 
0060b000-0060c000 rw-p 0000b000 08:03 827490        /bin/cat 
0060c000-0062d000 rw-p 00000000 00:00 0         [heap] 
3819a00000-3819a1e000 r-xp 00000000 08:03 532487       /lib64 ld-2.11.2.so 
3819c1d000-3819c1e000 r--p 0001d000 08:03 532487       /lib64/ld-2.11.2.so 
3819c1e000-3819c1f000 rw-p 0001e000 08:03 532487       /lib64/ld-2.11.2.so 
3819c1f000-3819c20000 rw-p 00000000 00:00 0 
3819e00000-3819f70000 r-xp 00000000 08:03 532490       /lib64/libc-2.11.2.so 
3819f70000-381a16f000 ---p 00170000 08:03 532490       /lib64/libc-2.11.2.so 
381a16f000-381a173000 r--p 0016f000 08:03 532490       /lib64/libc-2.11.2.so 
381a173000-381a174000 rw-p 00173000 08:03 532490       /lib64/libc-2.11.2.so 
381a174000-381a179000 rw-p 00000000 00:00 0 
7fb859c49000-7fb85fa7a000 r--p 00000000 08:03 192261      /usr/lib/locale/locale-archive 
7fb85fa7a000-7fb85fa7d000 rw-p 00000000 00:00 0 
7fb85fa95000-7fb85fa96000 rw-p 00000000 00:00 0 
7fff64894000-7fff648a9000 rw-p 00000000 00:00 0       [stack] 
7fff649ff000-7fff64a00000 r-xp 00000000 00:00 0       [vdso] 
ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0     [vsyscall] 
+1

Xem câu trả lời tại đây: http://stackoverflow.com/questions/16524895/proc-pid-maps-shows-pages-with-no-rwx-permissions-on-x86-64-linux – Enyby

Trả lời

1

Theo man page, nó có nghĩa là tư nhân (sao chép trên ghi). Không có ý tưởng gì về tính hữu ích của một ánh xạ như vậy là không có khả năng đọc/ghi/thực thi bất cứ thứ gì trong nó.

Có thể nó là riêng tư đối với libc, cho phép nó sửa đổi quyền truy cập nó mà không có chương trình người dùng vô tình nhét nó lên.

+0

Tôi nghĩ nó giống như thế này bởi vì nếu một chương trình sửa đổi bản sao libc mà nó đang sử dụng, thì libc đã sửa đổi sẽ được ánh xạ lại trong không gian bộ nhớ của quá trình đó, để nó sẽ tiếp tục không được sửa đổi cho các quy trình khác. – Dio

0

Đây là điều tôi đã tự hỏi về các chi tiết cụ thể của quá. Nó đã không xuất hiện cho đến khi đôi khi trong vài năm qua, nhưng tôi không chắc liệu bin binutils hoặc glibc liên kết năng động (ld-linux.so.2) có trách nhiệm thay đổi. Lúc đầu, tôi nghĩ rằng nó là một loại khu vực bảo vệ được tạo ra bởi liên kết động để bảo vệ chống lại giới hạn truy cập vào phân đoạn dữ liệu của thư viện, nhưng nó không có ý nghĩa cho nó quá lớn. Có thể đây là một bản đồ hoàn chỉnh của tệp thư viện trong khi đó trình liên kết động có thể làm cho nó có thể đọc được một lần nữa trong tương lai (có thể trong các cuộc gọi dlopen hoặc dlsym) để truy cập siêu dữ liệu ELF mà thông thường không cần phải được ánh xạ.

Trong mọi trường hợp, nó khó chịu, đặc biệt là trên các máy 32 bit, nơi không gian địa chỉ ảo là tài nguyên quý giá. Nó cũng bloats các bảng trang hạt nhân, tăng tài nguyên kernelspace được sử dụng bởi một quá trình.

P.S. Xin lỗi, đây không thực sự là câu trả lời. Tôi biết đó chỉ là những mảnh và mảnh ngẫu nhiên có thể giúp đưa ra câu trả lời, nhưng nó quá dài để nhận xét.