Linux下的虚拟地址映射详解(二)线性地址到物理地址的映射

现在有这么一个函数 void main(){int a = 2;cout while(a){;}cout}     函数运行起来会是这个样子:先打印出a的地址,假设是0x12345678,接着会进入死循环。现在如果要求你寻找某个办法,来跳出循环打印”fun end”,然后结束整个函数。(函数正在运行,不允许修改代码,也不能ctrl+c)你
摘要由CSDN通过智能技术生成

现在有这么一个函数

 

void main()

{

int a = 2;

cout<<&a<<endl;

 

while(a)

{

;

}

cout<<”fun end”<<endl;

}

 

    函数运行起来会是这个样子:先打印出a的地址,假设是0x12345678,接着会进入死循环。现在如果要求你寻找某个办法,来跳出循环打印”fun end”,然后结束整个函数。(函数正在运行,不允许修改代码,也不能ctrl+c)你会怎么做呢?

 

    从上一篇的博文我们知道了打印出来的地址0x12345678是逻辑地址,如果是在i386以前的操作系统里,我们只要从SS里找到段基址,再加上0x12345678,就能获得变量a的物理地址,修改这个物理地址上的值,把它变为0.就自然跳出循环打印结束了。但是,如果是在i386之后的32位操作系统会是怎么样呢?

 

    我们常说英特尔X86体系,是由于后来者能够兼容前者但是又能够做一些前者不能够做到的事情。i386之后,在分段式管理的基础上又

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值