教 :用和核空的理解
有就是我於用和核空的理解
1,用程序修改自己的text段有,比如
main()
{
unsigned long a = (unsigned long)main;
a = 0x3333;
}
目的就是修改自己的text段的容,段的容是RO只。故常。
2,用程序一核地址,比如0x3400000,也致常。
我的就是以上情分是那模式(用模式/超模式)而言?在linux中有有代是把用的程序置成 用模式的?kernel——exec有置模式的代。
是希望你可以一意。
我的箱:edwardlu666@hotmail.com
[解决办法]
LZ,你不知道内核的地址映射吗?先不说你这样直接给定地址的方式不合理。你这样给定地址后,最后运行时,一定是你给定的这个地址吗?要想做这方面的实验,估计绕不过地址映射的。
[解决办法]
普通用户自己写的程序都是处于用户模式,只能够访问用户空间的变量;任何物理地址,都是不能够访问的;
用户程序可以通过内核程序的调用或系统调用,访问到内核空间以及用户空间;
物理地址需要映射到进程虚拟的地址空间(内核或用户),才能够进行访问。
[解决办法]
这个要结合操作系统和cpu硬件来理解。
硬件本身就支持了不同空间不同模式访问权限的管理,这个可以配置。离开硬件的支持,所有的所谓软件管理的访问权限都是虚的。
在配置好硬件的基础上,操作系统就将空间分用户空间和内核系统空间,空间需要访问的权限和模式肯定不同,这样结合硬件就从根本上保证了系统操作的安全。
这是典型的操作系统+硬件内存管理的模式,看看相关的文章就能理解。
如果没有操作系统,就是通常的裸机+硬件内存管理,单独一个程序完全可以将自己的text段设置RO结合硬件。
这样非法访问时硬件就要包错了。 有操作系统的应用程序代码段访问 不一定会这样。
所以,根本的是硬件内存管理访问+软件配置, 单纯的软件管理是不能完全控制的