当前位置: 代码迷 >> 驱动开发 >> 請教 :用戶跟內核空間的理解
  详细解决方案

請教 :用戶跟內核空間的理解

热度:33   发布时间:2016-04-28 10:45:58.0
請教 :用戶和內核空間的理解
還有就是我對於用戶和內核空間的理解

1,用戶程序修改自己的text段會有問題,比如

main()

{

unsigned long a = (unsigned long)main;

a = 0x3333;

}

目的就是修改自己的text段的內容,這個段的內容是RO只讀。故異常。

2,用戶程序試圖訪問一個內核地址,比如0x3400000,這樣也會導致異常。

我的問題就是以上兩種情況分別是對應那種模式(用戶模式/超級模式)而言?在linux中有沒有代碼是把應用的程序設置成 用戶模式的?kernel——exec沒有發現設置模式的代碼。

還是希望你可以給一點意見。

謝謝 我的郵箱:[email protected]

------解决方案--------------------
LZ,你不知道内核的地址映射吗?先不说你这样直接给定地址的方式不合理。你这样给定地址后,最后运行时,一定是你给定的这个地址吗?要想做这方面的实验,估计绕不过地址映射的。
------解决方案--------------------
普通用户自己写的程序都是处于用户模式,只能够访问用户空间的变量;任何物理地址,都是不能够访问的;
 用户程序可以通过内核程序的调用或系统调用,访问到内核空间以及用户空间;
 物理地址需要映射到进程虚拟的地址空间(内核或用户),才能够进行访问。
------解决方案--------------------
这个要结合操作系统和cpu硬件来理解。
硬件本身就支持了不同空间不同模式访问权限的管理,这个可以配置。离开硬件的支持,所有的所谓软件管理的访问权限都是虚的。

在配置好硬件的基础上,操作系统就将空间分用户空间和内核系统空间,空间需要访问的权限和模式肯定不同,这样结合硬件就从根本上保证了系统操作的安全。

这是典型的操作系统+硬件内存管理的模式,看看相关的文章就能理解。

如果没有操作系统,就是通常的裸机+硬件内存管理,单独一个程序完全可以将自己的text段设置RO结合硬件。
这样非法访问时硬件就要包错了。 有操作系统的应用程序代码段访问 不一定会这样。

所以,根本的是硬件内存管理访问+软件配置, 单纯的软件管理是不能完全控制的
  相关解决方案