关于Windows的虚拟内存

liuwons 2012-04-14 07:40:32
Windows系统的中断向量常驻内存中低4K的位置,然后就看书上直接来了个汇编程序,直接写低4K的内存地址来更改中断向量,然后我就不懂了。。。
Windows程序不都是用的4G的虚拟地址么,在程序中的低4K位置能对应到物理地址的低4K ?还有,Windows不是有内存保护的么?!应用程序能直接写入不属于自己的物理内存单元?而且还是属于操作系统的内存单元?!
还有,Windows的内存到底是怎么管理的?!分页?分段?还是其他啥的?。。。
在图书馆找了半天书,翻遍了图书馆都找不到答案,求高手解答!!!。。。
设置终端向量表的代码如下:
mov ax,0
mov ex,ax
mov di,6*4 ;6号中断
mov ax,offset intsp ;intsp为中断处理程序
stosw
mov ax,cs
stosw
...全文
225 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
njuliao 2012-04-16
  • 打赏
  • 举报
回复
无责任转载:

winxp之后就无视分段机制了
在32位Windows下
CS、DS、SS、ES的基址都是0
进程空间保护靠的是分页机制
这就是所谓的平坦内存模式
akcw007 2012-04-16
  • 打赏
  • 举报
回复
你那是实模式编程
njuliao 2012-04-15
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 的回复:]

那么有没有分段机制什么的呢?引用 7 楼 的回复:
保护模式下,每个进程的地址空间是独立的。
你的内存地址,其实是页表索引+页内偏移。
操作系统根据索引获得实际地址,会做越界检查。
修改游戏的话,一般要注入到游戏所在进程,这样子就能操作游戏的地址空间。
[/Quote]

段机制,个人觉得是在本进程内的概念。
进程内的地址空间是独立32位。
在这空间里要区分数据段,代码段等等。
因此要加入段基址。
因此每个进程有自己的一个LDT。
自己的LDT决定自己的地址空间里是怎么分段的。
liuwons 2012-04-15
  • 打赏
  • 举报
回复
那么有没有分段机制什么的呢?[Quote=引用 7 楼 的回复:]
保护模式下,每个进程的地址空间是独立的。
你的内存地址,其实是页表索引+页内偏移。
操作系统根据索引获得实际地址,会做越界检查。
修改游戏的话,一般要注入到游戏所在进程,这样子就能操作游戏的地址空间。
[/Quote]
eeedddff22 2012-04-15
  • 打赏
  • 举报
回复
驱动写的 应用层没权限
njuliao 2012-04-15
  • 打赏
  • 举报
回复
保护模式下,每个进程的地址空间是独立的。
你的内存地址,其实是页表索引+页内偏移。
操作系统根据索引获得实际地址,会做越界检查。
修改游戏的话,一般要注入到游戏所在进程,这样子就能操作游戏的地址空间。
tan598121925 2012-04-15
  • 打赏
  • 举报
回复
发错地方了
liuwons 2012-04-15
  • 打赏
  • 举报
回复
看了下,但是不太明白,晕晕乎乎的,分段分页越看越晕。。。[Quote=引用 5 楼 的回复:]
看看8086,80386,实模式和保护模式吧!
[/Quote]
wenqinwuhai 2012-04-15
  • 打赏
  • 举报
回复
看看8086,80386,实模式和保护模式吧!
lida2003 2012-04-15
  • 打赏
  • 举报
回复
问错地方了吧。lz发到windows专区才能对口。
zbdzjx 2012-04-15
  • 打赏
  • 举报
回复
具体也不太懂,大致说一下,内存地址有虚和实之分,虚地址按一定规则变成实地址。
应该是找到某个正在运行的程序,就可以将里面的虚地址转换成实地址。
系统应该也有办法直接读实地址(可能要提高权限级别吧)。
例如:修改游戏的软件及游戏的挂,都是能找到其它的程序,并改里面的内容。
smilenot 2012-04-14
  • 打赏
  • 举报
回复
你研究的太深入了
不会回答

594

社区成员

发帖
与我相关
我的任务
社区描述
提出问题
其他 技术论坛(原bbs)
社区管理员
  • community_281
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧