Bộ nhớ nhân và bộ nhớ của người dùng được phân biệt chính xác như thế nào trong hạt nhân Linux (về mặt bảo mật cho không gian hạt nhân)?Cách truy cập không gian hạt nhân từ không gian người dùng?
Tôi có thể viết những cách khác nhau nào vào không gian địa chỉ hạt nhân từ không gian người dùng?
Một cách tôi biết là thông qua cuộc gọi hệ thống. Có nhiều cuộc gọi hệ thống mà chúng tôi có thể sử dụng, nhưng cuối cùng chúng là tất cả các cuộc gọi hệ thống. Ngay cả trong các cuộc gọi hệ thống, chúng tôi gửi dữ liệu đến không gian hạt nhân, nơi nó (trình điều khiển hoặc mô-đun tương ứng) gọi các hàm như copy_from_user() để sao chép dữ liệu từ không gian người dùng sang không gian hạt nhân. Ở đây chúng tôi chính xác không viết vào không gian địa chỉ. chúng ta chỉ cần truyền một con trỏ người dùng có chứa dữ liệu cần được sao chép vào bộ đệm hạt nhân.
Câu hỏi của tôi là có cách nào để chúng tôi có thể truy cập địa chỉ thực có trong không gian hạt nhân và thực hiện các thao tác trên đó không?
Thứ hai, Ngoài các cuộc gọi hệ thống, có bất kỳ cách nào khác mà tôi có thể viết vào không gian hạt nhân từ ứng dụng người dùng không?
Tôi đã gọi điều này link từ stackoverflow. Nhưng tôi nghĩ câu hỏi của tôi không được trả lời ở đó và có quan điểm khác. Do đó tôi nghĩ đến việc hỏi một câu hỏi khác.
Hãy chia sẻ kiến thức của bạn ... Cảm ơn bạn.
Trước tiên hãy tìm hiểu cách phân trang x86 hoạt động: https://stackoverflow.com/questions/18431261/how-does-x86-paging-work, điều này sẽ hữu ích. –
Ngoài ra, hãy xem [Cách truy cập mmaped/dev/mem mà không làm đứt hạt nhân Linux?] (Https://stackoverflow.com/q/11891979/608639), [mmap/dev/mem không thành công với đối số không hợp lệ, nhưng địa chỉ là liên kết trang] (https://stackoverflow.com/q/39134990/608639) và [Cách truy cập không gian hạt nhân từ không gian người dùng?] (https://stackoverflow.com/q/9662193/608639) – jww
Bạn có thể muốn đọc về [vDSO] (https://en.wikipedia.org/wiki/VDSO). –