首页 新闻 搜索 专区 学院

操作系统概念的问题 - 怎么理解这句话?

0
悬赏园豆:30 [已关闭问题]
<P>看Tanenbaum的《现代操作系统》,有一句话 不太明白:</P> <P>原文:</P> <P>Relocation during loading does not solve the protection problem. A malicious program can always construct a new instruction and jump to it. Because programs in this system use absolute memory addresses rather than addresses relative to a register, there is no way to stop a program from building an instruction that reads or writes any word in memory. In multiuser systems, it is highly undesirable to let processes read and write memory belonging to other users.</P> <P>译文:</P> <P>在程序装入时对程序进行重定位并没有解决保护问题。 一个恶意的程序总是能建立一条指令并跳转至该指令。 “因为这种系统中的程序使用绝对地址来访问内存,而不是使用相对某个寄存器的偏移地址,因此没有办法防止一个程序来建立一条读写任意存储位置的指令。” 在多用户系统中,这是非常不好的,因为我们不希望一个用户的进程可以访问其他用户的存储位置。</P> <P>问题:</P> <P>1 怎么理解双引号里的话? 为什么用了绝对地址来访问内存就不能阻止程序来访问任意存储位置?程序发出的地址请求不都是要经过MMC的么?难道不可以在MMC里进行安全控制? </P> <P>2 如果绝对地址真的没法控制,为什么采用相对某个寄存器的偏移地址就可以实现安全控制了呢?</P>
smwikipedia的主页 smwikipedia | 初学一级 | 园豆:160
提问于:2008-08-05 10:29
< >
分享
其他回答(1)
0
如果使用绝对地址,则应用程序可以直接访问内存中的任意地址,即使所访问的地址在系统分配给该应用程序的内存范围之外。而使用相对地址,则可以比较容易的限制应用程序所能访问的内存地址范围。举例来说,假设系统内存地址为0000-FFFF,分配给某一应用程序1K内存,被分配的内存为0000-04FF。如果使用绝对地址,该程序可以直接访问04ff-ffff之间的任意地址。
李荫桓 | 园豆:225 (菜鸟二级) | 2008-08-05 12:02
0
我的理解是,如果一个程序有权限访问操作系统的任意地址,它就能把别的程序的数据乃至代码给篡改了,这是很危险的。简单的例子就是类似修改游戏里的等级等属性的游戏作弊器。在Windows系统里,如果一个进程企图写入别的进程的地址,会被认为是非法操作,立马被操作系统杀无赦。不过Windows又提供了挂钩API,允许一个DLL被注入到正在执行的进程中,这时这个DLL里的代码就可以写入这个进程的任意内存地址了,像金山词霸这样的程序就是通过注入的DLL篡改了别的进程的DrawText()之类的系统API达到屏幕取词的功能的。
1-2-3 | 园豆:200 (初学一级) | 2008-08-06 10:11
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册